我有一个大型richfaces树,树中的每个元素都可以选择,通过AJAX加载内容并进行编辑,将您重定向到新页面。这很有效,直到我有了一个特别大的文件,我正在处理,保存不再有效。您被重定向到显示正确内容的编辑页面,但试图"保存"任何编辑都会导致ViewExpiredException。
我试着调整了很多参数,最终得到了两个修复它的参数:
com.sun.faces.numberOfViewsInSession
com.sun.faces.numberOfLogicalViews
据我所见,每个的默认值是15,我将它们设置为荒谬的500,应用程序就可以正常工作了。不幸的是,因为我不知道问题所在,而且这是一个大型应用程序,所以我无法向您展示任何相关的代码。
但问题是:这些参数到底是做什么的,是什么导致我遇到这些异常,什么是可接受的值?
更新
我不完全确定为什么这个问题被否决了,但如果是关于所谓的重复:我通过谷歌找到了那篇帖子,但它提供的链接已经死了。除了参数的沼泽标准(和模糊的)定义外,似乎没有太多关于它们的信息。
当使用服务器端状态保存(这是默认设置)时,这两个参数可以用于配置最大数量的逻辑视图和实际视图。
逻辑视图是在每次GET请求时创建的顶级视图(例如,当您在新的浏览器窗口或选项卡中打开页面时,在浏览器的地址栏中输入地址,iframes…)。每个逻辑视图都可以有一些关联的实际视图。实际视图是在用户使用标准JSF机制浏览页面时创建的(例如,如果您导航到commandButton
中action
方法返回的页面)。两个视图队列都使用LRU算法来决定何时删除视图,并且这些队列的最大数量受到这两个参数值的限制。
因此,com.sun.faces.numberOfViewsInSession
定义了每个逻辑视图在会话中存储的JSF视图的最大数量,com.sun.faces.numberOfLogicalViews
定义了每个会话要存储的逻辑视图的最大数目。
根据您提供的信息,怀疑com.sun.faces.numberOfViewsInSession
的配置解决了您的问题,但您必须进一步调查为什么创建了这么多视图。
附加链接:
- 服务器端和客户端状态保存之间有什么区别?两者的优点/缺点是什么