• Tapestry AjaxFormLoop


    一个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
    {
    
        @Inject
        private UserService userService;
    
        @Property
        @Persist
        private List<User> userList;
    
        @Property
        private User user;
    
        @SetupRender
        void 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>
  • 相关阅读:
    flex布局下,将内容限定在容器内(如内容超出以省略号显示)的实现方案
    模板引擎——jquery.tmpl.js
    CSS布局——display: flex
    js实现实时显示当前时间的方法
    PS——规定尺寸的证件照的制作
    辅助开发——ps一键切图篇
    TCP的三次握手和四次挥手
    HTTP 协议基础入门篇总结
    频率组件
    视图组件
  • 原文地址:https://www.cnblogs.com/voctrals/p/3008854.html
Copyright © 2020-2023  润新知