jsf - 点击 bean 方法并重定向 GET 请求

标签 jsf jsf-2 query-string http-get method-invocation

我在 GlassFish 上使用 JSF 2 和 PrimeFaces 2.1。

我有一个页面,旨在允许人们在遵循回调 URL 后执行操作(例如,作为嵌入在电子邮件中的链接或作为某些外部身份验证或支付服务的回调 URL 参数)。就我而言,我需要重置密码。回调 URL 有一个 token GET 参数,如下所示:

http://example.com/app/resetPasswordForm.jsf?token=abc123

On page load of resetPasswordForm.jsf, I need to check if the token is valid and redirect to the main app screen if it's not valid.

My thinking is to have a bean method like:

public String resetPasswordHandler.showResetForm(String token) {
  if /* token is valid */ {
    return "resetPasswordForm.jsf";
  } else {
    return "main.jsf";
  }
}

但是我怎样才能使该方法在页面加载时被命中呢?

不确定如何继续——欢迎提出建议。

最佳答案

使用 <f:viewAction> 在渲染 View 之前触发 bean 方法并简单地返回导航结果(这将隐式地被视为重定向)。

例如

<f:metadata>
    <f:viewParam name="token" value="#{authenticator.token}" />
    <f:viewAction action="#{authenticator.check}" />
</f:metadata>

@ManagedBean
@RequestScoped
public class Authenticator {

    private String token;

    public String check() {
        return isValid(token) ? null : "main.jsf";
    }

    // Getter/setter.
}

如果您还没有使用 JSF 2.2,那么您可以使用 <f:event type="preRenderView"> ExternalContext#redirect() 结合使用的解决方法.

<f:metadata>
    <f:viewParam name="token" value="#{authenticator.token}" />
    <f:event type="preRenderView" listener="#{authenticator.check}" />
</f:metadata>

@ManagedBean
@RequestScoped
public class Authenticator {

    private String token;

    public void check() throws IOException {
        if (!isValid(token)) {
            FacesContext.getCurrentInstance().getExternalContext().redirect("main.jsf");
        }
    }

    // Getter/setter.
}

另请参阅:

关于jsf - 点击 bean 方法并重定向 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488211/

相关文章:

javascript - 使用带有 JSF 的 JavaScript 进行客户端验证

java - JSF h :selectManyCheckbox inside ui:repeat via Map entry

jsf-2 - h :form rendered correctly, 但 h :commandLink doesn't get rendered correctly. 我必须在链接上单击两次

java - RestEasy 可以根据查询参数选择方法吗?

javascript - Jquery - 从查询字符串中获取 '#' 值之后而不是 '?' 符号值之后

jsp - 为什么 HttpServletRequest#getParameterValues ("key") 不将分号识别为分隔符?

java - 如何在 EL 中比较字符串变量?

java - 如何向组中的每个收件人发送相同的邮件?

css - 在 `Primefaces:dashboard` 组件上添加标签和自定义 CSS

java - JMS MQ 连接在 JSF 2 SessionBean 中关闭