在主窗口中使用jatax.faces.application.ViewExpiredException来在新窗口中打开新屏幕

时间:2018-01-16 05:25:02

标签: jsf java-ee primefaces

场景:Total Two屏幕和两个作用域都定义了@ViewScoped

屏幕1进入打开的window.open(screen.xhtml)屏幕并检查屏幕2中的一些功能并关闭屏幕2,然后转到屏幕1并单击按钮然后抛出以下错误。

javax.faces.application.ViewExpiredException: /glb/GlbMbrReviewSubmissionWorkflow.xhtmlNo saved view state could be found for the view identifier: /glb/GlbMbrReviewSubmissionWorkflow.xhtml
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

1 个答案:

答案 0 :(得分:0)

每个页面的视图状态在会话中的LRU映射中存储在服务器(默认)中,大小为15.当在第2页中查看最近的页面时,页面将从地图中弹出15次。解决方法是,

  1. 要么可以配置增加地图大小以增加它,但会增加服务器内存负载。

  2. 或者将defaut状态保存机制值更改为“client”,但会增加网络流量。

  3. 一种推荐的解决方案是在指定的秒数内从第1页轮询服务器,以便将视图置于地图顶部,以便不会被删除。