点击bean方法并对GET请求进行重定向



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

我有一个页面,旨在让人们执行以下回调URL后的动作(如链接嵌入在电子邮件或一些外部认证或支付服务的回调URL参数)。在我的情况下,我需要重置密码。回调URL的token GET参数如下:

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

resetPasswordForm.jsf的页面加载上,我需要检查令牌是否有效,如果无效,则重定向到主应用程序屏幕。

我的想法是有一个bean方法,如:

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

但是我如何让这个方法在页面加载时被击中呢?

不知道如何进行-欢迎提出建议

在呈现视图之前使用<f:viewAction>触发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 2.0中的通信-处理GET请求参数
  • 什么可以和& lt; f: viewAction>被用于?
  • 我如何处理GET查询字符串URL参数在后台bean页面加载?

相关内容

  • 没有找到相关文章

最新更新