用户在没有填写信息的情况下看到这些视图。
preRenderView
如果信息已填写,只需检查事件侦听器。如果没有,请重定向回来。
<f:event type="preRenderView" listener="#{bean.init}" />
和
public void init() throws IOException {
if (information == null) {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect(externalContext.getRequestContextPath() + "/otherpage.xhtml");
}
}
如有必要,您可以将它与FacesContext#isValidationFailed()
您是否实际上也在使用<f:viewParam>
with 验证结合起来。例如
<f:viewParam name="id" value="#{bean.information}" required="true" />
<f:event type="preRenderView" listener="#{bean.init}" />
和
public void init() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.isValidationFailed()) {
ExternalContext externalContext = context.getExternalContext();
externalContext.redirect(externalContext.getRequestContextPath() + "/otherpage.xhtml");
}
}
更新:在 JSF 2.2 中,您可以使用<f:viewAction>
它。
<f:viewAction listener="#{bean.check}" />
public String check() {
if (information == null) {
return "otherpage?faces-redirect=true";
} else {
return null;
}
}