【问题标题】:com.sun.faces.enableRestoreView11Compatibility what use instead in JSF 1.2com.sun.faces.enableRestoreView11Compatibility 在 JSF 1.2 中使用什么
【发布时间】:2010-12-15 12:25:31
【问题描述】:

当我有 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 的解决方案是什么?

【问题讨论】:

    标签: java jsf viewexpiredexception


    【解决方案1】:

    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() 的返回值为空,则抛出带有相应错误消息的ViewExpiredException。必须抛出 javax.faces.application.ViewExpiredExceptionis aFacesException` 以向应用程序发出未返回视图标识符的预期视图的信号。应用程序可能会根据此异常选择执行某些操作。

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


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

    【讨论】:

    • 我认为我可以使用 ... 将用户重定向到登录页面,但是如果没有这个兼容性参数,这是行不通的。我需要编写我的 PhaseListener 来执行此重定向,或者可能有一些简单的方法。
    • 这个设置在 JSF 2.2 中仍然有效还是有任何其他选项?
    猜你喜欢
    • 2011-06-17
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多