JSF selectonemenu不会更新

时间:2013-08-06 07:33:41

标签: jsf primefaces selectonemenu

我是JSF的初学者,我对selectonemenu项目有问题。当我选择一个项目时,例如'FirstLabel',应该显示outputpanel。但是,selectone菜单不会更新我的选择。我使用primefaces 3.1库我怎么能解决这个问题。谢谢你的帮助。

            <p:selectOneMenu value="#{denemeView.str}" effect="fold" editable="true"  >  
                <f:selectItem itemLabel="Please choose!." itemValue="" /> 
                <f:selectItem itemLabel="FirstLabel" itemValue="1" /> 

                <f:selectItem itemLabel="SecondLabel" itemValue="2" /> 

                <p:ajax   process="@this"  update=":Form2:panel1"/>
                <p:ajax process="@this" update=":Form2:panel2"/>
            </p:selectOneMenu> 


        </p:outputPanel> 


        <p:outputPanel id="panel1" rendered="#{denemeView.str=='1'}">

            <h:outputText value="Output: * " />
            <p:inputText id="out" value="#{denemeView.islem}" />



        </p:outputPanel>

        <p:outputPanel id="panel2" rendered="#{denemeView.str=='2'}">

            <h:outputText value="True choice! " />

        </p:outputPanel>

1 个答案:

答案 0 :(得分:1)

如果JSF组件设置了rendered="false",那么它不会被重新处理(组件对象不存在于对象树中),并且无法使用<p:ajax update="someId"/><f:ajax render="someId"/>进行更新。您需要做的是将这两个面板包装在外部面板中并更新该面板。像这样:

<p:ajax   process="@this"  update="outerPanel"/>
...
<p:outputPanel id="outerPanel">
 <p:outputPanel id="panel1" rendered="#{denemeView.str=='1'}">
        <h:outputText value="Output: * " />
        <p:inputText id="out" value="#{denemeView.islem}" />
 </p:outputPanel>

 <p:outputPanel id="panel2" rendered="#{denemeView.str=='2'}">
        <h:outputText value="True choice! " />
 </p:outputPanel>
</p:outputPanel>

有关类似问题,请参阅here