【问题标题】:JSF How to save the current state before navigating to other page on error casesJSF 如何在错误情况下导航到其他页面之前保存当前状态
【发布时间】:2012-06-17 23:01:14
【问题描述】:

我有一个多页申请表(jsf 1.2),带有用于导航的下一个和上一个按钮。 这些页面应符合以下要求。

1) 应该允许用户在这些页面上来回移动,即使是部分填充的页面。强制字段验证不应阻止他在屏幕之间移动。

2) 此外,他在页面上输入的数据应在他返回该页面时恢复。

在错误情况下,jsf 将始终回发到同一个视图,但我通过在流程验证回调后使用阶段侦听器内的导航处理程序解决了这个问题。

但是如何在渲染新页面之前保存当前状态。我尝试在渲染阶段之前在 UIView 上调用 saveState,但这不起作用。我该如何解决这个问题?

满足这些要求的最佳方法是什么。 我非常感谢您对此的回答。谢谢。

约束: 我必须在 jsf 1.2 中解决这个问题,不能使用 jsf 2.0 会话状态或第三方解决方案,例如战斧 savestate :(

【问题讨论】:

    标签: jsf jsf-1.2


    【解决方案1】:

    如果您只需要坚持使用 JSF 1.2,那么您做不到。您必须将您在 bean 中处理的所有数据保存到会话中,并在 bean 构造函数中恢复所有内容。如果您可以使用第三方库,我会向您推荐 RichFaces 3.3.3,它有一个 KeepAlive 注释,您可以将其放在您的请求托管 bean 上并将其转换为 ViewBean(通过将整个请求 bean 保存在会话中如果您在同一个视图中,则加载它)。

    KeepAlive 注释示例(看起来很简单):

    @KeepAlive
    public class MyViewWannaBeBean {
        private String name;
        public MyViewWannaBeBean() {
        }
        //getters and setters...
    }
    

    在 faces-config.xml 中定义 bean,就像一个请求管理的 bean

    <managed-bean>
        <managed-bean-name>myViewWannaBe</managed-bean-name>
        <managed-bean-class>mypackage.MyViewWannaBeBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    

    【讨论】:

    • 感谢您的回复 luiggi。问题是即使流程验证阶段失败,我也需要保存状态。在这种情况下,流程不会到达更新模型阶段,并且支持 bean 不会被更新。在这种情况下,我相信我需要以某种方式将组件状态存储在服务器上。
    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多