Jsf 2 如何渲染<;p:选择一个功能表>;
我无法呈现selectOneMenu,但只能禁用该项 例如,这是可行的:Jsf 2 如何渲染<;p:选择一个功能表>;,jsf-2,primefaces,Jsf 2,Primefaces,我无法呈现selectOneMenu,但只能禁用该项 例如,这是可行的: <p:panel header="Field Chooser"> <h:panelGrid columns="2" cellpadding="5"> <p:selectOneMenu id="l1" value="#{acqBean.gb1}"> <f:selectItem itemLabel="Group By" ite
<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;
}
}
public void handleGroupChange(){
如果(gb1!=null&&!gb1.equals(“”){
level2=level2Data.get(gb1);
RenderLevel 2=假;
}否则{
level2=新的HashMap();
RenderLevel 2=真;
}
}
而这个不是:
<p:selectOneMenu id="l2" value="#{acqBean.gb2}" rendered="#{acqBean.renderLevel2}">
<f:selectItems value="#{acqBean.level2}" />
</p:selectOneMenu>
有什么建议吗
谢谢您不能用ajax更新一个组件,因为它本身是有条件呈现的。只能使用ajax更新始终呈现的组件。简单的原因是,当组件未呈现时,生成的HTML代码中基本上没有任何内容可以由JavaScript基于ajax响应进行选择和操作 因此,将带有
rendered
属性的
放在没有rendered
属性的
中,并在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>
另见: