我正在JSF2.0中开发一个应用程序。将ajax和panelGroup与呈现属性混合时遇到问题。
我的页面包含3个面板。在第一个面板中,用户从<h:selectOneMenu>
中选择一个项目。这会导致渲染第二个面板。
第二个面板包含一个h:dataTable,它连接到辅助bean中的DataModel。 dataTable的值由在第一个面板的<h:selectOneMenu>
中选择的项确定。表中的每一行都包含一个commandLink,用于查看该行项目的详细信息:
<h:commandLink action="#{faseController.selectInvulling}">
<f:ajax render="@form" execute="@form" />
</h:commandLink>
单击commandLink,将呈现第三个面板:
<h:panelGroup rendered="#{faseController.invullingSelected}" layout="block" styleClass="panelElement" id="invulling">
<label>
<span>Datum:</span>
<h:inputText value="#{faseController.selectedInvulling.datum}" required="true" requiredMessage="Gelieve een datum in te vullen." converterMessage="Gelieve een geldige datum in te vullen (dd/mm/jjjj)." >
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
</label>
<label>
<span>Evaluatie</span>
<h:inputTextarea value="#{faseController.selectedInvulling.evaluatie}" cols="100" />
</label>
<label>
<span>Methode</span>
<h:inputTextarea value="#{faseController.selectedInvulling.methode}" cols="100" />
</label>
</h:panelGroup>
这是我遇到问题的地方。我第一次单击commandLink查看表中该行的详细信息时,我在第三个面板中获得了正确的数据。然后我更改第一个面板的<h:selectOneMenu>
中的项目:在第二个面板中呈现正确的相应dataTable。但是这次当我点击表格中的commandLink来查看该项目的详细信息时,我会看到第一次点击的项目中的信息。
如果我省略rendered="#{faseController.invullingSelected}"
一切正常,但这会导致视图混乱,因为现在总是渲染第三个面板。
所有三个面板都以相同的形式存在。我的支持bean是ViewScoped。我究竟做错了什么?任何帮助都将不胜感激。
答案 0 :(得分:1)
如果您使用getter方法而不是(action)侦听器方法执行业务逻辑,则会发生这种情况。我还想知道您是否需要execute
和render
整个表单。尝试更具体地指定要执行和/或重新渲染的元素。
这个问题过于宽泛,代码不够完整,无法确定真正的原因,并提出了一个现成的解决方案。
答案 1 :(得分:0)
尝试使用它。
<a4j:commandLink action="#{faseController.selectInvulling}" execute="@this"
render="thirdPanelId" limitRender="true"/>
仅执行您要处理的组件,并仅渲染需要刷新的组件。