【发布时间】:2013-05-29 11:00:29
【问题描述】:
我们的客户不希望使用 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 上发布 POST,我的登录页面,在 Home.xhtml 上重定向和 GET。
第二次更新: 看起来我的操作永远不会被调用,我直接得到 ViewExpiredException 和 HTTP 500 错误代码。
第三次更新: 看起来 HttpSession 始终为空,跟踪模式设置为 URL,使用 cookie 正确创建了 HttpSession。如果没有会话,FacesServlet 不应该创建会话并在 URL 中附加 JSESSIONID 吗?
另一个更新: 与
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
会话将在回发时创建。但比我遇到的
java.io.NotSerializableException
.
【问题讨论】:
-
你的 backbean viewscoped 了吗?
-
@Makky LoginBean 是 RequestScoped 但将其更改为 ViewScoped 也无济于事。
标签: jsf primefaces glassfish-3