session - 如何设置 View 超时?

标签 session jsf-2 view timeout

在JBoss 7.1.1上的 JSF2 项目中,我们在web.xml中定义了一个 session 超时,它工作得很好。

但是,有时我们会导致 View 过期,即使 session 仍然存在,也会导致类似这样的错误:

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.

我们可以像在 session 中那样在哪里设置 View 超时?还是 View 过期是由其他原因引起的?

最佳答案

ViewExpiredException的另一个原因是在 session 中创建了太多的逻辑 View 。缺省限制是特定于JSF实现的,并且特定 View 上的每个同步GET请求基本上都会创建一个新 View 。因此,例如,当您使用Mojarra(默认限制为15)并启动浏览器 session 并在16个不同的选项卡中打开相同的 View ,然后在第一个选项卡中提交表单时,也可能会遇到此异常。可以使用JSF实现特定的上下文参数来配置该限制,该参数对于Mojarra是 com.sun.faces.numberOfLogicalViews ,在MyFaces中是 org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION (默认为20)。
但是,这是一个非常罕见的现实问题。如果您的Web应用程序确实是设计用于这种方式的(例如,邀请在多个选项卡中打开的社交/社区网站,例如讨论论坛或Q&A),那么您可以考虑使用客户端状态保存。
也可以看看:

  • javax.faces.application.ViewExpiredException: View could not be restored
  • com.sun.faces.numberOfViewsInSession vs com.sun.faces.numberOfLogicalViews
  • 关于session - 如何设置 View 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562469/

    相关文章:

    mysql - 您如何处理.Net session 提供程序错误?

    spring - 如何从 Spring Boot 中的公共(public)类中获取 session ?

    jsf - 在 cc 外部声明标记 :implementation and let the cc:implementation include it

    ios - UILabel 没有显示更新后的高度?

    c# - 如何保存Session BLL的变量?

    asp.net-mvc - ASP.Net MVC 应用程序注销未完全注销

    java - 如何在 JSF 2.2 中实现加载页面

    java - 是否可以使用 ApplicationScoped bean 为 JSF 2 应用程序添加 richfaces 皮肤?

    mysql 将多个表中的多个列合并到一列中

    java - 如何刷新 recyclerview 的上一个项目行 View 的 View