[Tapestry5] tapestry 5.1 更新数据

hxzon 2010-08-04
使用tapestry 5.1 更新数据,
当显示页面时,使用一个对象,例如user,发现页面提交时,自动生成了另一个user对象,不是渲染页面时的对象了。
如何不自动生成新的user对象,而是使用旧的user对象。
使用@Persist的话是会话范围保留值,但这是不正确的,因为打开多个修改页面时,user是最后一次打开的user对象,而不是每个页面一个对象。
请教~~
fantify 2010-08-05
看你的情况,你应该是使用了BeanEditor或者BeanEditForm组件了吧?

如果是这样的话在表单提交时,因为user必定为null(因为没有使用任何persist策略)t5会自动为你调用new User()来生成一个user对象。简单的解决方法有2个:
1. 把user放到activation context中,即添加类似 void onActivate(User user)和UseronPassivate() {return this.user}这2个方法。这样用户信息能在请求之间通过url来维持

2. 使用hidden组件把user保存在表单中,如<t:hidden value="user"/>,这里要求hidden放在form组件的最开始位置,因此只能使用BeanEditor而不能使用BeanEditForm了。

注:为了在url或者hidden中只使用该user的id,需要在系统中配置好User的ValueEncoder
hxzon 2010-08-05
非常感谢,昨晚仔细看文档发现了方法一,呵呵,thanks very much~
Global site tag (gtag.js) - Google Analytics