【问题标题】:Tomcat 7.0.19 and Mojarra 2.1.2 ViewExpiredExceptionTomcat 7.0.19 和 Mojarra 2.1.2 ViewExpiredException
【发布时间】:2011-10-26 13:40:47
【问题描述】:

长期以来,我一直在我的项目中使用 Tomcat 6.0.26。现在,我需要在这个项目中使用 EL 2.2,因此我将其移至 Tomcat 7.0.19,没有进行其他更改(使用 Mojarra 2.1.2-b04 和 RichFaces 4.0.0)。当我启动它时,一切都很好,直到我尝试任何 a4j:commandButton 或 h:commandButton 它都会抛出 ViewExpiredException,即使应用程序启动不到一分钟(对于信息,我在 web.xml 中强制了 30 分钟会话超时) .

使应用程序正常工作的唯一方法是更改​​此设置:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

它是 server,我将其更改为 client,但服务器设置最好保留数据服务器端,不要在每次请求时将其传输到客户端。

Edit : serverclient 似乎修复了 ViewExpiredException 的问题,但是网站上的用户登录功能不起作用了。它登录到用户主页,但在单击任何链接后,它的作用与用户不是记录器一样(我使用 SessionScoped ManagedBean 来保存用户信息)。

有人遇到过这个问题吗?

谢谢,

亚历克斯。

【问题讨论】:

    标签: jsf-2 tomcat6 tomcat7 mojarra viewexpiredexception


    【解决方案1】:

    当视图不在会话中时,您将收到ViewExpiredException。所描述的症状表明会话 cookie 没有得到维护,因此每个请求都以某种方式迫使服务器创建一个全新的会话。

    我无法在针对 Tomcat 7.0.19 的准系统 Mojarra 2.1.2 项目上本地重现您的问题。会话得到很好的维护。我在第一个请求中看到JSESSIONIDSet-Cookie 响应标头,在同一浏览器会话中的每个后续请求中我看到JSESSIONIDCookie 请求标头。这就是它应该如何工作的方式。所以这个问题至少与 Mojarra 2.1.2 或 Tomcat 7.0.19 没有直接关系。

    您可以使用 Firebug 自己查看和跟踪 JSESSIONID cookie。这是我要做的第一件事。您应该检查是否是浏览器拒绝发回 Cookie 请求标头(我认为不是这种情况),或者是服务器每次都发送新的 Set-cookie 响应标头(我认为就是这种情况)。如果确实是服务器每次都重新创建会话,即使浏览器已经发送了 Cookie 标头,那么这只能意味着代码库中某处的 HttpSession#invalidate() 调用不正确,这会强制执行此操作。运行调试器来确定罪魁祸首。

    【讨论】:

    • 谢谢,你让我走上了正确的道路,我使用的是 ,它在 Tomcat 6.0.XX 下工作,但在 Tomcat 7.0.XX 下不工作可以看到。我删除了这个属性,稍后我会看到如何让会话在多个域名下工作。
    猜你喜欢
    • 2012-06-12
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2010-10-31
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多