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

7 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>
Run Code Online (Sandbox Code Playgroud)

sessionExpired.jsf

....
<c:redirect url="/index.jsf" />
Run Code Online (Sandbox Code Playgroud)

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

McD*_*ell 12

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为还原的视图返回a .如果返回ViewHandler.restoreView()值为null,则抛出一个ViewExpiredException带有相应错误消息的消息.javax.faces.application.ViewExpiredException is aFacesException`必须抛出以向应用程序发出信号,表明未为视图标识符返回预期视图.应用程序可以选择基于此异常执行某些操作.

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


com.sun命名空间表明参数是Sun /钻嘴鱼科和派生实现特定的设置,所以它可能不会与所有的JSF实现工作.

  • 此设置在JSF 2.2中是否仍然有效,或者有任何ither选项? (3认同)
  • 我以为我可以使用&lt;error-page&gt; ...将用户重定向到登录页面,但是如果没有此兼容性参数,则无法使用。我需要编写PhaseListener来进行这种重定向,或者也许有一些简单的方法。 (2认同)