我想处理支持bean中<p:panel>
内的所有<h:panelGroup>
组件。我已将<h:panelGroup>
绑定到支持bean属性。但在@PostConstruct
方法中,属性为null
。在属性setPanel()
的setter期间,组件没有子项。如果我使用按钮提交某些内容,那么我可以获得该小组的孩子。
在@PostConstruct
方法中,我需要做些什么来获取组件的子项?
查看:
<h:panelGroup binding="#{wiz.panel}">
<p:panel header="one">
<h:outputText value="primeiro" />
</p:panel>
<p:panel header="two">
<h:outputText value="segundo" />
<h:inputText />
</p:panel>
<p:panel header="three">
<h:outputText value="terceiro" />
</p:panel>
<p:panel header="four">
<h:outputText value="quarto" />
</p:panel>
</h:panelGroup>
支持bean
@PostConstruct
public void init() {
if (getPanel() != null) {
for (UIComponent comp : getPanel().getChildren()) {
if (comp instanceof Panel) {
System.out.println(((Panel) comp).getHeader());
}
System.out.println("not a panel child");
}
} else {
System.out.println("panel is null");
}
}
答案 0 :(得分:0)
这是不可能的。在组件树完成构建之前很久就可以调用@PostConstruct
。而是挂钩preRenderView
事件。在那时,视图保证已经建立。您可以在视图中按<f:event>
附加事件侦听器方法,如下所示:
<f:event type="preRenderView" listener="#{bean.init}" />
不要忘记从@PostConstruct
方法中删除init()
注释,或者在必要时重命名/拆分方法。
毋庸置疑,这种做法很可疑。我建议重新考虑您的方法,如有必要,请提出一个新问题,其中详细说明功能要求。也许最终的答案就是使用普通的EL和/或rendered
属性。