一个AjaxFormLoop控件需要指定source,value,t:id和encoder四个属性。
source和value跟loop一样。
而这个encoder必须要提供,因为它与addRow和removeRow有很大的关系。
另外一个form是必须的。
这里有几个注意事项
1 removeRow
对应着java端的onRemoveRowFromSomeId,而这个SomeId跟t:id的值是一样的。
2 addRow
同上,onAddRowFormSomeId。。。
3 onRemoveRowFromSomeId方法的参数,为value指定的类型。。。
而value的值为encoder的toValue的值。。。
4 onAddRowFormSomeId方法的返回值是一个value指定的类型。。。
所以页面上,必须要有这个value的所有的属性,否则会出错。。。
public class AjaxFormLoopStudy {@Injectprivate UserService userService;@Property@Persistprivate List<User> userList;@Propertyprivate User user;@SetupRendervoid preparePageBean(){userList = userService.getAllUsers();}Object onAddRowFromUsers(){User user = new User();return user;}void onRemoveRowFromUsers(User user){System.out.println(user);userService.deleteCurrent(user);}// void onRemoveRowFromUsers(String user)// {// System.out.println(user);// // userService.deleteCurrent(user);// }public ValueEncoder<User> getValueEncoder(){return new ValueEncoder<User>() {public String toClient(User value){return value.getId();}public User toValue(String id){return new User(id);}};} }
<t:form t:id="form"><t:ajaxformloop source="userList" value="user" t:id="users"encoder="valueEncoder"><input t:type="textField" value="user.id" /><input t:type="textField" value="user.name" /><input t:type="textField" value="user.age" /><input t:type="textField" value="user.story" />|<t:removerowlink>删除</t:removerowlink></t:ajaxformloop></t:form>