How to rendered <p:selectOneMenu> [duplicate]

无人久伴 提交于 2020-01-05 06:40:37

问题


I am unable to rendered a selectOneMenu but only to disable the item

for example this is working:

<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;
    }
}

and this one not:

<p:selectOneMenu id="l2" value="#{acqBean.gb2}" rendered="#{acqBean.renderLevel2}">  
            <f:selectItems value="#{acqBean.level2}" />  
        </p:selectOneMenu> 

Any advice please

Thanks


回答1:


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.

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>

See also:

  • Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?


来源:https://stackoverflow.com/questions/13885981/how-to-rendered-pselectonemenu

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!