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

时间:2009-11-11 15:36:06

标签: java jsf viewexpiredexception

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

的web.xml

...
    <context-param>
        <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
        <param-value>true</param-value>
    </context-param>
...
 <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionExpired.jsf</location>
 </error-page>

sessionExpired.jsf

....
<c:redirect url="/index.jsf" />

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

1 个答案:

答案 0 :(得分:12)

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

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

JSF 1.1行为的IBM notes说:

  

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

默认的JSF 1.2行为在the spec中定义为:

  

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

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


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