Jsf 点击bean方法并在GET请求上重定向

Jsf 点击bean方法并在GET请求上重定向,jsf,jsf-2,query-string,http-get,method-invocation,Jsf,Jsf 2,Query String,Http Get,Method Invocation,我在GlassFish上使用JSF2和PrimeFaces2.1 我有一个页面,允许人们在遵循回调URL后执行操作(例如,作为嵌入在电子邮件中的链接或作为某些外部身份验证或支付服务的回调URL参数)。在我的情况下,我需要重置密码。回调URL有一个tokenGET参数,如下所示: http://example.com/app/resetPasswordForm.jsf?token=abc123 但我如何使该方法在页面加载时被命中呢 不确定如何继续--欢迎您提出建议。用于在呈现视图之前触发bean方

我在GlassFish上使用JSF2和PrimeFaces2.1

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

http://example.com/app/resetPasswordForm.jsf?token=abc123 但我如何使该方法在页面加载时被命中呢

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

用于在呈现视图之前触发bean方法,并仅返回导航结果(将隐式地视为重定向)

例如


@ManagedBean
@请求范围
公共类验证器{
私有字符串令牌;
公共字符串检查(){
返回isValid(令牌)?null:“main.jsf”;
}
//盖特/塞特。
}
如果您还没有使用JSF2.2,那么您可以结合使用解决方案


@ManagedBean
@请求范围
公共类验证器{
私有字符串令牌;
public void check()引发IOException{
如果(!isValid(令牌)){
FacesContext.getCurrentInstance().getExternalContext().redirect(“main.jsf”);
}
}
//盖特/塞特。
}
另见:

我正在GlassFish上使用JSF2(带Primefaces 2.1)——谢谢,这很好用!还有一个问题,当我因为externalContext.redirect而向FacesContext添加FacesMessage时,faces消息不会出现在“main.jsf”上。这正常吗?有没有办法让它正常工作?是的,这很正常。面消息是请求范围的。重定向指示浏览器发出全新的HTTP请求。您需要在重定向URL中传递一个请求参数,并让消息截获显示在该URL上,或者使用
true
调用,以便通过cookie恢复它们(在某些情况下,Mojarra中目前有一个奇怪的bug,请注意,另请参见)。您能否解释一下如何使用@BalusC上的验证器执行此操作:视图操作组件的操作方法在应用程序逻辑调用阶段被激发,正好在绑定到某个命令按钮的操作方法之前。然而,对于预渲染视图,其将在渲染响应阶段激发。对于是否可以使用预渲染视图执行重定向,我有点困惑。那不是已经足够晚了吗?@Shirgill:只要响应没有提交(也就是说,只要JSF没有提交响应),重定向仍然是可能的。
public String resetPasswordHandler.showResetForm(String token) {
  if /* token is valid */ {
    return "resetPasswordForm.jsf";
  } else {
    return "main.jsf";
  }
}