我们的客户不希望使用 cookie 进行会话处理,这也会导致 Apache/mod_rewrite 网关出现问题,所以我尝试使用
<tracking-mode>URL</tracking-mode>
在我们的 web.xml 中。Glassfish3/Servlet 3.0 应该就是这些了。但是现在我在尝试登录时收到 ViewExpiredExceptions(这不是 AJAX 请求):
<p:commandButton id="submit"
value="${msg['Login.submit.label']}"
action="#{loginBean.login}"
ajax="false"/>
我还尝试在客户端保存会话,而不是在 URL 中看到 JSESSIONID,但这会为我的@EJB 引发 NotSerializableExceptions。有任何想法吗?我想念什么吗?它曾经与 cookie 一起工作得很好。
更新:LoginBean.login 返回“Home.xhtml?faces-redirect=true”,单击命令按钮时的预期行为:在 Login.xhtml 上发布,我的登录页面,在 Home.xhtml 上重定向和 GET。
第二次更新:看起来我的操作永远不会被调用,我直接得到 ViewExpiredException 和 HTTP 500 错误代码。
第三次更新:在跟踪模式设置为 URL 的情况下,看起来 HttpSession 始终为空,使用 HttpSession 的 cookie 是正确创建的。如果没有会话,FacesServlet 不应该创建会话并在 URL 中附加 JSESSIONID 吗?
另一个更新:有
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
会话将在回发时创建。但比我遇到的
java.io.NotSerializableException
.