Ajax侦听器没有更新primefaces中所选项目的面板



我尝试使用primefaces选择菜单更新基于所选数据的面板,ajax侦听器通过更新面板来处理。但我的面板没有更新,选择的项目显示在控制台窗口。这意味着ajax调用进入了托管bean。但它没有在faces页面更新,并提到了我的代码

<p:panelGrid columns="1"  style="align:center;width:80%" styleClass="companyHeaderGrid">
        <p:row>
            <p:column><h:outputLabel for="runobject" value="Run Object: " /></p:column>
            <p:column>  
             <p:selectOneMenu id="selectedState" value="#{TAScheduleBean.selectedRunObjectItem}"   >
             <p:ajax listener="#{TAScheduleBean.changePanelState}"  render="@this"  update=":form:displayDailyPanel"/>
            <f:selectItem itemLabel="Select One" itemValue="Select One" />  
            <f:selectItems value="#{TAScheduleBean.runObjectsValue}" />
            </p:selectOneMenu>
            </p:column>
            </p:row>
            <p:row id="displayDailyPanel"   rendered="#{TAScheduleBean.appSelectedRunObject eq 'Daily'}">
            <p:column>
                <p:outputLabel value=" N days" />
                        <p:outputLabel  value="Days=" /><p:inputText id="s"/>
            </p:column>
    </p:panelGrid>

我在同一个论坛和其他论坛也读了相关的问题。但是这个问题并没有解决。我该如何解决这个问题?请帮帮我

更新:

ManagedBean

public class TAScheduleBean extends TASBean  {
        private String selectedRunObjectItem="";
        private  String appSelectedRunObject="";
        TAScheduleBean(){
        }
        public void changePanelState(){
        String methodName="changePanelState";
        setPanelIsVisible(true);
        TALogger.log(Logger.INFO, className,
                methodName, "---------"+getSelectedRunObjectItem());
        setAppSelectedRunObject(getSelectedRunObjectItem().trim());
        }
    }

谢谢大家。我解决了这个问题。当我们选中项目时,该行还没有被创建,因为我们调用了'渲染'属性。所以我创建了面板,并在下面提到代码

<p:panel id="toppanel">  <------- added panel
<p:panelGrid columns="1"  style="align:center;width:80%" styleClass="companyHeaderGrid">
        <p:row>
            <p:column><h:outputLabel for="runobject" value="Run Object: " /></p:column>
            <p:column>  
             <p:selectOneMenu id="selectedState" value="#{TAScheduleBean.selectedRunObjectItem}"   >
             <p:ajax listener="#{TAScheduleBean.changePanelState}"  render="@this"  update="toppanel"/>  <------changed
            <f:selectItem itemLabel="Select One" itemValue="Select One" />  
            <f:selectItems value="#{TAScheduleBean.runObjectsValue}" />
            </p:selectOneMenu>
            </p:column>
            </p:row>
            <p:row id="displayDailyPanel"   rendered="#{TAScheduleBean.appSelectedRunObject eq 'Daily'}">
            <p:column>
                <p:outputLabel value=" N days" />
                        <p:outputLabel  value="Days=" /><p:inputText id="s"/>
            </p:column>
    </p:panelGrid>
</p:panel>

最新更新