我无法呈现selectOneMenu,但只能禁用该项目
例如,这是有效的:
<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> 有什么建议吗?
谢谢
发布于 2012-12-15 21:52:00
您不能ajax更新组件,因为组件本身是有条件地呈现的。您只能对始终呈现的组件进行ajax更新。原因很简单,当组件没有被呈现时,结果代码中基本上没有任何东西可以由基于ajax响应的JavaScript选择和操作。
因此,将具有rendered属性的<p:selectOneMenu>放入例如没有rendered属性的<h:panelGroup>中,并在ajax更新中引用它。
<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>另请参阅:
https://stackoverflow.com/questions/13885981
复制相似问题