HtmlPanelGroup - 绑定 - h:panelGroup 树深度
HtmlPanelGroup - binding - h:panelGroup tree depth
我遇到过几次这个问题,但似乎我不确定如何解决这个问题...如果我将 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 包含 bare 命令按钮,根本没有被 G1(div)包围 :P
p.s 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);
}
...
}
和豆子:
@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
) 树深度是否有限制?如果不是如何解决它,因为它很烦人;或者有更多的替代方法吗?
谢谢
如果不是@ManagedBean
,似乎@PostConstruct
不起作用(如果我错了请纠正我);对于扩展 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 的情况下,所谓的 backing bean 可以使用某种常见的 POJO 方式;
p.s。我仍在解决这个问题,所以请随时评论提示:)
干杯
我遇到过几次这个问题,但似乎我不确定如何解决这个问题...如果我将 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 包含 bare 命令按钮,根本没有被 G1(div)包围 :P
p.s 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);
}
...
}
和豆子:
@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
) 树深度是否有限制?如果不是如何解决它,因为它很烦人;或者有更多的替代方法吗?
谢谢
如果不是@ManagedBean
,似乎@PostConstruct
不起作用(如果我错了请纠正我);对于扩展 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 的情况下,所谓的 backing bean 可以使用某种常见的 POJO 方式;
p.s。我仍在解决这个问题,所以请随时评论提示:)
干杯