使用Ajax只更新ui:repeat而不是所有表单



我在应用程序中呈现一些数据时遇到了一些问题。为了简单起见,我有一个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 executef:ajax render,但我需要找出问题在哪里,并找到一个解决方案的性能。

祝你一天愉快谢谢!

编辑:

在试图找到解决方案时,我注意到其中一个侦听器更改了bean中的一个值,并且该值需要呈现一个重要的脚本来触发保存(见下文)

<h:outputScript rendered="#{fil.modifie}">
    showNoticeChangementDialog();
</h:outputScript>

这些代码行就在我的ui:repeat结束之前,这意味着通过仅更新ui:repeat,如果我的值被修改,它应该触发对话框?

我试图改变renderexecute与我的ui:repeat的id,但它不工作。

我在一个同事的帮助下找到了一个解决办法。

必须将每个<td>的内容包装在h:panelGroup中,并给它们一个唯一的id。然后我可以在每个元素上使用render来确保它们已经更新。

看起来像这样:<f:ajax render="id1 id2 id3 id4 ..."

相关内容

  • 没有找到相关文章

最新更新