【发布时间】:2011-10-16 06:34:19
【问题描述】:
假设我有一个注册页面和一个注册确认页面。我输入用户 详细信息进入注册页面,导航到注册确认页面,其中 如果有任何错误,我可以返回注册页面。
我将使用视图参数来提供注册数据 从注册页面到确认页面,反之亦然。
假设有 20 项数据要从一个页面移动到另一个页面,那就是 很多视图参数和很多setPropertyActionListeners,尤其是 因为所有数据最终都会很好地打包在一个用户对象中。
所以我要做的就是将注册页面上的数据输入到 用户记录的属性并将对它的引用发送到寄存器 确认页面。让我想到的是 BalusC WeakHashMap 转换器。这是一个 JSF 转换器,它有一个静态的弱哈希映射和 生成一个 uuid 作为映射条目的值,并将对象引用作为 钥匙。因此,通过将其指定为 f:viewParam 您发送的转换器 查询字符串中的 uuid。
这很好用。我遇到的问题是在注册页面上我必须 使用 new 获取 User 类的实例。然后我可以这样做:
<h:inputText value="#{bean.user.firstname}"/>
(etc...),并将用户实例作为视图参数传递。它工作正常 注册到确认页面。问题是当我执行 反向,将用户引用从 确认页面我绝对不能阻止注册页面支持 bean 从重新实例化用户对象开始,在 setter 被调用之后 作为 view 参数的结果。
所以转换器完成了它的工作并从 哈希映射,在支持 bean 中调用 setUser(),然后我看到 User 类触发的构造函数。
我尝试在 @PostConstruct 中从 bean 构造函数调用 new User(), 在 preRenderView 中(也检查是否有 ajax 请求),但我没有尝试 如果 new 是,防止视图参数的工作被清除 涉及。我确定有一个简单的解决方案,但我就是看不出来 现在。
对于如何解决此问题的任何建议,我将不胜感激。
【问题讨论】: