我是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>
答案 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。