如何呈现< p:selectOneMenu> [英] How to rendered <p:selectOneMenu>
问题描述
我无法呈现selectOneMenu,而只能禁用该项
I am unable to rendered a selectOneMenu but only to disable the item
例如,它正在工作:
<p:panel header="Field Chooser">
<h:panelGrid columns="2" cellpadding="5">
<p:selectOneMenu id="l1" value="#{acqBean.gb1}">
<f:selectItem itemLabel="Group By" itemValue="" />
<f:selectItems value="#{acqBean.level1}" />
<p:ajax update="l2" listener="#{acqBean.handleGroupChange}"/>
</p:selectOneMenu>
<p:selectOneMenu id="l2" value="#{acqBean.gb2}" disabled="#{acqBean.renderLevel2}">
<f:selectItems value="#{acqBean.level2}" />
</p:selectOneMenu>
</h:panelGrid>
<p:separator />
</p:panel>
public void handleGroupChange() {
if (gb1 != null && !gb1.equals("")) {
level2 = level2Data.get(gb1);
renderLevel2 = false;
} else {
level2 = new HashMap<String, String>();
renderLevel2 = true;
}
}
而这个不是:
<p:selectOneMenu id="l2" value="#{acqBean.gb2}" rendered="#{acqBean.renderLevel2}">
<f:selectItems value="#{acqBean.level2}" />
</p:selectOneMenu>
请提供任何建议
谢谢
推荐答案
您不能Ajax更新本身是有条件呈现的组件.您只能Ajax更新总是 呈现的组件.一个简单的原因是,当不呈现该组件时,结果HTML代码中基本上没有任何内容,可以由JavaScript根据ajax响应进行选择和操作.
You can't ajax-update a component which is by itself conditionally rendered. You can only ajax-update a component which is always rendered. The simple reason is, when the component is not rendered, then there's basically nothing in the resulting HTML code which can be selected and manipulated by JavaScript based on the ajax response.
因此,将具有rendered
属性的<p:selectOneMenu>
放入没有rendered
属性的<h:panelGroup>
中,并在您的Ajax更新中引用它.
So, put the <p:selectOneMenu>
with the rendered
attribute in for example a <h:panelGroup>
without the rendered
attribute and refer it instead in your ajax update.
<p:selectOneMenu id="l1" value="#{acqBean.gb1}">
<f:selectItem itemLabel="Group By" itemValue="" />
<f:selectItems value="#{acqBean.level1}" />
<p:ajax update="l2group" listener="#{acqBean.handleGroupChange}"/>
</p:selectOneMenu>
<h:panelGroup id="l2group">
<p:selectOneMenu id="l2" value="#{acqBean.gb2}" rendered="#{acqBean.renderLevel2}">
<f:selectItems value="#{acqBean.level2}" />
</p:selectOneMenu>
</h:panelGroup>