我有一个简单的登录表单,它调用一个动作,如果登录成功,则返回安全区域的视图 ID。我想使用 ajax 来执行该操作,但是当页面被重定向时,表单中不存在 javax.faces.ViewState,使得用户必须单击两次才能恢复它。如果我设置 ajax="false" 一切正常,只是我失去了使用 p:ajaxSatatus 实现的酷过渡。
在使用 BlausC http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#AjaxRenderingOfContentWhichContainsAnotherForm的此博客条目之前,我已经处理过此类问题 我还看到了commandButton/commandLink/ajax 操作/listener 方法未调用或输入值未更新
我过去成功地解决了这个问题,但现在我被困住了。
我的环境是:Mojarra 2.1.6 PrimeFaces 3.4.2 GlassFish Server Open Source Edition 3.1.2.2
代码:
<h:form id="loginForm">
<div style="margin: 0px auto; width: 300px;">
<p:messages />
<p:panelGrid columns="2" styleClass="panelGridNoBorder">
<h:outputLabel value="Name: " for="txtPrincipal"/>
<p:inputText id="txtPrincipal" value="#{userBean.principal}"/>
<h:outputLabel value="Email:" for="txtPassword"/>
<p:password id="txtPassword" value="#{userBean.password}" />
</p:panelGrid>
<p:commandButton id="loginButon" action="#{userBean.login}" value="Login"/>
</div>
</h:form>
UserBean.java @SessionScoped
public String login() {
try {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
loginedUser = autenticator.authenticate(principal, passHash, request.getRemoteAddr());
request.login(principal, passHash);
if (loginedUser != null) {
return "/admin/index.xhtml";
} else {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuario o contraseña incorrecto", "Usuario o contraseña incorrecto");
FacesContext.getCurrentInstance().addMessage(null, message);
return null;
}
} catch (ServletException ex) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuario o contraseña incorrecto", "Usuario o contraseña incorrecto");
FacesContext.getCurrentInstance().addMessage(null, message);
return null;
}
}
谢谢您的帮助