2016-10-04 53 views
0

我面對這個問題了幾次,但看起來像我不知道如何解決這個...如果我使用HtmlPanelGroup爲:HtmlPanelGroup - 結合 - H:樹panelGroup中深入

客戶端:

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

輔助bean(S):

@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

PS的taglib.xml確實包含G1配置爲:

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

編輯

或者h:panelGroup這樣-s樹可能導致類似的問題:

客戶端:

<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 
    } 

所以我的問題是... 什麼原因導致這種情況,以及如何解決這個問題,或者是否有解決方法?

我還不確定在JSF框架中div的樹深度是否有限制(h:panelGroup)?如果不是如何處理它,因爲它很煩人;還是有更多的替代方法?

感謝

+0

我真的堅持下去:S任何想法? – cbhogf

回答

0

好像@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); 
    } 
    ... 
    } 

所以有方法invok-ED我決定使用構造函數(見代碼段)

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); 
    } 
    ... 
    } 

...在jsf所謂的支持bean的情況下使用某種常見的POJO方式是很好的;


p.s.我仍然在這個周圍工作,所以隨時發表評論的提示:)

乾杯