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

HtmlPanelGroup-binding-h:panelGroup树深度

  •  0
  • cbhogf  · 技术社区  · 8 年前

    我多次面临这个问题,但似乎我不确定如何解决这个问题……如果我使用 HtmlPanelGroup 作为:

    客户:

    <h:panelGroup ... binding="#{myBean.myPanelGroup}">
    </h:panelGroup>
    

    背衬豆:

    @ManagedBean(name="myPanelGroup")
    @RequestScoped
    public class G0 extends HtmlPanelGroup{
      ...
      public void addComp(ActionEvent e){
       HtmlCommandButton commandButton=new HtmlCommandButton();
       commandButton.setValue("aValue");
    
       G1 g1=new G1();
       g1.addComp(commandButton);
    
       this.getChildren().add(g1);
    }
    }
    

    另一个对象:

    @FacesComponent(value="myPanel")
    public class G1 extends HtmlPanelGroup{
      ...
      @PostConstruct
      public void init(){this.setLayout("block");}
      public void addComp(UIComponent c){this.getChildren().add(c);}//bare button only :(
    }
    

    由于某些原因,生成的HTML包含 光秃秃的 完全没有被G1(div)包围的命令按钮:P

    p、 这是taglib。xml确实包含G1配置,如下所示:

    ...
        <tag>
        <tag-name>aTag</tag-name>
        <component>
          <component-type>myPanel<component-type>
        </component>
        </tag>
    ...
    

    编辑

    h:panelGroup -这样的树可能会导致类似的问题:

    <h:panelGroup ... binding="#{gBean.g}"/>
    

    支持bean:

        public class G extends HtmlPanelGroup{
        ...
        HtmlPanelGroup g0;
        HtmlPanelGroup g1;
        HtmlPanelGroup g2;
    
        @PostConstruct
        public void init(){
           g0=new HtmlPanelGroup();
           g0.setStyleClass("g0");
           g1=new HtmlPanelGroup();
           g1.setStyleClass("g1");
           g2=new HtmlPanelGroup();
           g2.setStyleClass("g2");
    
           g0.getChildren().add(g1);
           g1.getChildren().add(g2);
           this.getChildren().add(g0);
        }
        ...
        }
    

    和bean:

        @ManagedBean(name="gBean")
        @RequestScoped
        public class GBean {
          ...
          private G g;
          ...
          @PostConstruct
          public void initGBean(){
          g=new G(); 
        }
    
        public void addComp(ActionEvent e){
          HtmlCommandButton c=new HtmlCommandButton();
          c.setValue(""+Math.random());
    
          this.g.getChildren().add(c);
    }
         //getters setters
        }
    

    所以我的问题是。。。 原因是什么,如何修复,或者有解决方法吗?

    h: 小组 )JSF框架中的树深度?如果不是,如何解决它,因为它很烦人;还是有其他的选择?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   cbhogf    8 年前

    似乎 @PostConstruct 如果它不起作用,就不起作用 @ManagedBean (如果我错了,请纠正我) ; 对于扩展的对象 HtmlPanelGroup

    public class G extends HtmlPanelGroup{
        ...
        HtmlPanelGroup g0;
        HtmlPanelGroup g1;
        HtmlPanelGroup g2;
    
        @PostConstruct
        public void init(){
           g0=new HtmlPanelGroup();
           g0.setStyleClass("g0");
           g1=new HtmlPanelGroup();
           g1.setStyleClass("g1");
           g2=new HtmlPanelGroup();
           g2.setStyleClass("g2");
    
           g0.getChildren().add(g1);
           g1.getChildren().add(g2);
           this.getChildren().add(g0);
        }
        ...
        }
    

    public class G extends HtmlPanelGroup{
        ...
        HtmlPanelGroup g0;
        HtmlPanelGroup g1;
        HtmlPanelGroup g2;
    
    
       public G(){
         this.init();
       }
    
        public void init(){
           g0=new HtmlPanelGroup();
           g0.setStyleClass("g0");
           g1=new HtmlPanelGroup();
           g1.setStyleClass("g1");
           g2=new HtmlPanelGroup();
           g2.setStyleClass("g2");
    
           g0.getChildren().add(g1);
           g1.getChildren().add(g2);
           this.getChildren().add(g0);
        }
        ...
        }
    

    后台bean 可以使用某种常见的POJO方式;


    p、 在美国,我仍然在做这方面的工作,所以请随意评论提示:)

    干杯