渲染属性在后续ajax调用中不更新
我有一个调用视图范围bean方法的渲染属性在后续ajax调用中不更新,ajax,jsf,primefaces,Ajax,Jsf,Primefaces,我有一个调用视图范围bean方法的p:commandButton。该方法设置两个名为textA和textB的字符串字段,并返回 ajax调用完成后,将显示对话框。根据变量选项,我希望只显示一个网格。它的初始值是choiceA。发生的情况是,页面加载了默认选项A,我单击按钮,actionListener方法设置textA,对话框显示出来。正如预期的那样,只有一个网格 但是,当我选择choiceB时,仍然显示相同的网格,gridA。换句话说,p:panelGrids的rendered属性仅在页面加载
p:commandButton
。该方法设置两个名为textA和textB
的字符串字段,并返回
ajax调用完成后,将显示对话框。根据变量选项
,我希望只显示一个网格。它的初始值是choiceA
。发生的情况是,页面加载了默认选项A,我单击按钮,actionListener方法设置textA
,对话框显示出来。正如预期的那样,只有一个网格
但是,当我选择choiceB时,仍然显示相同的网格,gridA
。换句话说,p:panelGrid
s的rendered
属性仅在页面加载时正常工作,但在随后的ajax调用中不会更新。奇怪的是,textA和textB
更新得很好
以下是代码的相关部分
<h:form>
<p:selectOneRadio id="optionChoice" value="#{bean.choice}"
<f:selectItem itemLabel="B" itemValue="choiceB" />
<f:selectItem itemLabel="A" itemValue="choiceA" />
</p:selectOneRadio>
<p:commandButton value="Save"
actionListener="#{bean.save}"
update="dialogId"
oncomplete="ajaxComplete(xhr, status, args)">
</h:form>
...
<p:dialog widgetVar="dialog" id="dialogId">
<p:tabView id="tabViewX">
<p:tab id="tabA" title="Tab A">
<h:panelGrid id="gridA" rendered="#{bean.choice eq 'choiceA'}">
<p:inputTextarea value="#{bean.textA}" />
<h:button />
</h:panelGrid>
<h:panelGrid id="gridB" rendered="#{bean.choice eq 'choiceB'}">
<p:inputTextarea value="#{bean.textB}" />
</h:panelGrid>
</p:tab>
</p:tabView>
</p:dialog>
ajax响应是什么样子的?您是如何阻止缓存的ajax调用的?@Diodeus:JSF默认情况下已经这样做了。ajax响应是:{“validationOk”:true}
,因此对话框根本不会更新。我已经不确定这是真正的代码还是一条红鲱鱼,但是你说输入已经更新了。现在,这个回答是不可能的,我将发布一个答案。