打一个bean方法并redirect一个GET请求
我在GlassFish上使用JSF 2和PrimeFaces 2.1。
我有一个页面,旨在允许用户在跟踪callbackURL(例如,embedded到电子邮件中的链接或某些外部validation或付款服务的回叫URL参数)之后执行操作。 在我的情况下,我需要重置密码。 callbackURL有一个token
GET参数,如下所示:
http://example.com/app/resetPasswordForm.jsf?token=abc123
在resetPasswordForm.jsf
页面加载时,我需要检查标记是否有效,如果无效,则redirect到主应用程序屏幕。
我的想法是有一个像下面这样的bean方法:
public String resetPasswordHandler.showResetForm(String token) { if /* token is valid */ { return "resetPasswordForm.jsf"; } else { return "main.jsf"; } }
但是,我将如何导致该方法在页面加载中被击中?
不知道如何继续 – build议是受欢迎的。
使用<f:viewAction>
在呈现视图之前触发一个bean方法,并简单地返回一个导航结果(这将隐式地被视为redirect)。
例如
<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请求参数
- 什么可以使用<f:元数据>,<f:viewParam>和<f:viewAction>?
- 如何在页面加载时在后台bean中处理GET查询stringURL参数?