我在应用程序中呈现一些数据时遇到了一些问题。为了简单起见,我有一个h:表单,它包含一个表,表主体中有一个ui:repeat。让我们做一个例子(我没有把所有的代码,因为它会太长):
<h:form id="sequence-assemblage-form">
<ui:fragment>
<table id="table-fils">
<thead>
...
</thead>
<tbody>
<ui:repeat id="fil">
<tr>
many <td> one after another
<ui:fragment>
<td>
<h:panelGroup id="actionsEditing" rendered="">
<h:inputHidden id="filHarnaisId" value="#{fil.id}"/>
<h:commandLink styleClass="icon-20 icon-save" id="save">
<f:ajax execute="@form" render="" listener="doesAnAction"/>
<f:ajax execute="@form" render="@form" listener="doesAnotherAction"/>
<f:ajax execute="@form" render=":integrite-form :message-integrite-panel" onevent="verifierIntegrite"/>
</h:commandLink>
<h:commandLink styleClass="icon-20 icon-rollback" id="rollback" action="">
<f:ajax execute="@this" render="@form" />
</h:commandLink>
</h:panelGroup>
</td>
</ui:fragment>
</tr>
</ui:repeat>
</tbody>
</table>
</ui:fragment>
</h:form>
我的问题是,每次我保存,它渲染表单完全,这导致性能问题,当我的表包含许多行(你知道,当一个页面需要像10秒的加载每次保存?)。是否有一种方法可以这样做,它只会呈现我目前正在编辑的行?
我不知道问题是与f:ajax execute
或f:ajax render
,但我需要找出问题在哪里,并找到一个解决方案的性能。
祝你一天愉快谢谢!
编辑:在试图找到解决方案时,我注意到其中一个侦听器更改了bean中的一个值,并且该值需要呈现一个重要的脚本来触发保存(见下文)
<h:outputScript rendered="#{fil.modifie}">
showNoticeChangementDialog();
</h:outputScript>
这些代码行就在我的ui:repeat
结束之前,这意味着通过仅更新ui:repeat
,如果我的值被修改,它应该触发对话框?
我试图改变render
和execute
与我的ui:repeat
的id,但它不工作。
我在一个同事的帮助下找到了一个解决办法。
必须将每个<td>
的内容包装在h:panelGroup
中,并给它们一个唯一的id。然后我可以在每个元素上使用render
来确保它们已经更新。
看起来像这样:<f:ajax render="id1 id2 id3 id4 ..."