JSF如何在错误情况下导航到其他页面之前保存当前状态

时间:2012-06-14 20:48:43

标签: jsf jsf-1.2

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

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

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

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

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

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

限制条件: 我必须在jsf 1.2中解决这个问题,不能用于jsf 2.0会话状态或第三方解决方案,如tomahawk savestate :(

1 个答案:

答案 0 :(得分:0)

如果你只需要坚持使用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>