javax.faces.ViewState在p:commandButton操作中丢失

javax.faces.ViewState在p:commandButton操作中丢失,java,jsf-2,primefaces,java-ee-6,Java,Jsf 2,Primefaces,Java Ee 6,我有一个简单的登录表单,它调用一个操作,如果登录成功,它将返回安全区域的视图id。我想使用ajax进行操作,但是当页面重定向时,javax.faces.ViewState不在表单中,这使得用户必须单击两次才能恢复它。如果我设置ajax=“false”,一切都正常,除了我失去了用p:ajaxSatatus实现的冷静过渡 在使用BlausC的这篇博文之前,我已经处理过这类问题 我也看到了 过去我与richfaces成功地解决了这个问题,但现在我陷入了困境 我的环境是: 莫哈拉2.1.6 第3.4.2

我有一个简单的登录表单,它调用一个操作,如果登录成功,它将返回安全区域的视图id。我想使用ajax进行操作,但是当页面重定向时,javax.faces.ViewState不在表单中,这使得用户必须单击两次才能恢复它。如果我设置ajax=“false”,一切都正常,除了我失去了用p:ajaxSatatus实现的冷静过渡

在使用BlausC的这篇博文之前,我已经处理过这类问题 我也看到了

过去我与richfaces成功地解决了这个问题,但现在我陷入了困境

我的环境是: 莫哈拉2.1.6 第3.4.2条 GlassFish服务器开源版本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>

感谢您的帮助

如果您使用MSIE浏览器,您的具体问题是可以识别的。您基本上需要重写PrimeFaces ajax响应处理程序。有关具体的代码示例,请参见

但是,更好的方法是在登录后发送重定向。这也是符合Post重定向Get模式的规范方法

return "/admin/index.xhtml?faces-redirect=true";

你在用MSIE吗?其他浏览器呢?顺便说一句,从技术上讲,您应该在登录后通过返回
“/admin/index.xhtml?faces redirect=true”
进行重定向,这也会立即修复丢失的视图状态问题。真遗憾,这就是问题所在。请把答案贴出来,这样我就可以做标记了@巴卢斯克,你又一次救了我!
return "/admin/index.xhtml?faces-redirect=true";