在JSF 1.2中,在单个页面上避免ViewExpiredException

在JSF 1.2中,在单个页面上避免ViewExpiredException,jsf,jsf-1.2,viewexpiredexception,Jsf,Jsf 1.2,Viewexpiredexception,我有一个不受保护的登录页面,可以通过不同的导航案例访问 问题是:许多用户访问该登录页面并将其打开一段时间,然后再次登录。繁荣可怕的ViewExpiredException发生了!我希望避免ViewExpiredException,让他们再次登录。我不希望所有视图都有解决方法,只希望登录页面 我无法迁移到JSF2(出于预算原因) 我有以下配置: javax.faces.STATE_SAVING_METHOD = server 这是我无法改变的(我们有一个有限的带宽和机制,阻止http请求大于一个

我有一个不受保护的登录页面,可以通过不同的导航案例访问

问题是:许多用户访问该登录页面并将其打开一段时间,然后再次登录。繁荣可怕的ViewExpiredException发生了!我希望避免ViewExpiredException,让他们再次登录。我不希望所有视图都有解决方法,只希望登录页面

我无法迁移到JSF2(出于预算原因)

我有以下配置:

javax.faces.STATE_SAVING_METHOD = server
这是我无法改变的(我们有一个有限的带宽和机制,阻止http请求大于一个输入字段非常有限的小表单页面)


有什么想法吗?

我无法从JSF上下文中获取我的登录页面,因为我的登录页面中有一大堆行为依赖于JSF上下文

我终于用一个肮脏的黑客解决了这个问题。在RestoreViewPhase侦听器中,我检测到当前视图已过期,我从HTTP请求中获取所有参数,并将其放入会话管理bean中

然后,当我回到登录页面时,一些javascript会自动重新提交表单和新视图


非常有攻击性,但它可以工作。

如果您使用的是Mojarra(不是MyFaces),则只能为整个应用程序(而不是单个页面)配置它通过将context param
com.sun.faces.enableRestoreView11Compatibility
设置为
true
。这可以接受吗?好吧,也许吧!当视图过期时,在其他页面会发生什么?我会像你在前一篇文章中所说的那样获得一些“WTF”体验吗?只有在依赖视图范围状态的情况下,但在JSF 1.x中是“视图范围”已经不存在托管bean范围。如果您使用类似Tomahawk的东西模拟JSF 2.x视图范围,那么它可能会以“WTF”体验结束,因为引用的bean将从头开始重建,而不是在视图过期时重新使用(因此,您将获得一个新的bean,而不是错误页面)好的,EnableRestoreView11兼容性的有趣之处在于它重新呈现了登录页面,而不是遵循我的应用程序中定义的导航规则。因此,我又回到了我的登录页面上。但是没有ViewExpiredException:(嗯。另一种方法是离开它,使用简单的HTML和简单的servlet组合。