我几次面对这个问题,但似乎我不知道如何解决这个问题......如果我使用HtmlPanelGroup
作为:
客户:
<h:panelGroup ... binding="#{myBean.myPanelGroup}">
</h:panelGroup>
支持bean:
@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.s 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
}
所以我的问题是...... 导致这种情况的原因以及如何解决这个问题或是否有解决方法?
我仍然不确定JSF框架中的div(h:panelGroup
)树深度是否有限制?如果不是如何解决它因为它很烦人;还是有更多的替代方式?
由于
答案 0 :(得分: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);
}
...
}
所以要调用方法我决定使用构造函数(参见代码片段)
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。我还在这里工作,所以请随意评论提示:)
干杯