代码之家  ›  专栏  ›  技术社区  ›  ebt

Tapestry 5.2在哪里定义类?

  •  0
  • ebt  · 技术社区  · 14 年前

    Failure writing parameter 'row' of component admin/Add:grid.rows: Failure writing parameter 'row' of component admin/Add:grid: Could not find a coercion from type com.foo.bar.pages.admin.Add$RolesRow to type com.foo.bar.pages.admin.Add$RolesRow.
    

    我能想到的一个错误是毫无帮助的。我知道Tapestry希望您注入所有依赖项,但我还没有弄清楚使用什么模式来注入您将要动态实例化的类。

    编辑:这是课程

       public static class RolesRow{
        @Property public Boolean ROLE_SUPER;
        @Property public Boolean ROLE_ADMIN;
        @Property public Boolean ROLE_USER;
        @Property public Boolean ROLE_VIEW;
        @Property public Boolean ROLE_EMAIL;
        private Map<String,Role> roles;
        public RolesRow(){
    
        }
        public RolesRow(Map<String,Role> roles){
            ROLE_SUPER = (roles.containsKey("ROLE_SUPER") ? true:false);
            ROLE_ADMIN = (roles.containsKey("ROLE_ADMIN") ? true:false);
            ROLE_USER =  (roles.containsKey("ROLE_USER") ? true:false);
            ROLE_VIEW =  (roles.containsKey("ROLE_VIEW") ? true:false);
            ROLE_EMAIL = (roles.containsKey("ROLE_EMAIL") ? true:false);
            this.roles = roles;
        }
        public List<Role> selected(){
            List<Role> r = new ArrayList<Role>();
            checked(r,"ROLE_SUPER",ROLE_SUPER);
            checked(r,"ROLE_ADMIN",ROLE_ADMIN);
            checked(r,"ROLE_USER",ROLE_USER);
            checked(r,"ROLE_VIEW",ROLE_VIEW);
            checked(r,"ROLE_EMAIL",ROLE_EMAIL);
            return r;
        }
        private void checked(List<Role> r,String field,Boolean obj){
            if (obj !=null && obj == true){
                r.add(roles.get(field));
            }
    
        }
    

    我正在setupRender中实例化记录:

            void setupRender(){
             List<RolesRow> list = new ArrayList<RolesRow>();
         list.add(new RolesRow());
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Henning    14 年前

    像这样的业务类不应该位于Tapestry的“magic”文件夹中( components , mixins pages ,或 services ).

    每当包中的任何文件发生更改时,Tapestry都将重新加载(并重新转换)类(这是实时类重新加载机制的一部分。)在会话中存储该类的对象时,会导致奇怪的类强制转换异常,例如“A不能强制转换为A”

    一般来说,只将类放在 文件夹,并将其他所有内容放在其他地方。当您有一个真正应该是组件类(比如您的)的内部类的类时,这可能是一个麻烦,因为您必须将它移到使用它的组件之外。

    您也不能使用Tapestry的元编程魔力,例如 @Property .