com.sun.faces.enableRestoreView11Compatibility在JSF 1.2中使用的是什么

当我有javax.faces.application.ViewExpiredException时,我想将用户发送到登录页面。

web.xml中

...  com.sun.faces.enableRestoreView11Compatibility true  ...  javax.faces.application.ViewExpiredException /errors/sessionExpired.jsf  

sessionExpired.jsf

 ....  

但enableRestoreView11Compatibility是JSF 1.1中使用的方法,什么是JSF 1.2的解决方案?

com.sun.faces.enableRestoreView11Compatibility是一个JSF 1.2设置,告诉JSF 1.2表现得像JSF 1.1。

com.sun.faces.enableRestoreView11Compatibility == true表示“不抛出ViewExpiredException ;而只是创建一个新视图,如果旧视图已过期。”

IBM关于JSF 1.1行为的说明如下:

这可能会产生不利行为,因为它是一个新视图,通常在视图中的项目(如状态)不再存在。

默认的JSF 1.2行为在规范中定义如下:

如果请求是回发,请调用ViewHandler.restoreView() ,传递当前请求和视图标识符的FacesContext实例,并为恢复的视图返回UIViewRoot 。 如果ViewHandler.restoreView()的返回值为null,则抛出带有相应错误消息的ViewExpiredException 。 javax.faces.application.ViewExpiredException is a FacesException`,必须抛出该信号以向应用程序发出信号,表明没有为视图标识符返回预期的视图。 应用程序可以选择基于此exception执行某些操作。

要在视图到期时抛出ViewExpiredException ,请删除com.sun.faces.enableRestoreView11Compatibility参数或将其设置为false


com.sun命名空间表明该参数是Sun / Mojarra和派生的特定于实现的设置,因此它可能不适用于所有JSF实现。