3

我有一个使用 Ajax on 的复合组件<p:selectOneButton/>,当 Ajax 调用actionListeneron<p:commandButton/>它调用 10 次然后运行该方法。我认为问题的原因是<p:dataGrid/>因为当我<p:commandButtton/>无法<p:dataGrid/>访问时,它可以正常工作,但是当我在<p:dataGrid/>Ajax 调用中actionListener多次使用它时。

这是.xhtml:

<table style="width: 100%">
    <tr>
        <td><p:selectOneButton value="#{inviteRequestManagedBean.filterType}">
                <f:selectItem itemLabel="#{inviteRequest_msg.request}" itemValue="request" />
                <f:selectItem itemLabel="#{inviteRequest_msg.archive}" itemValue="archive" />
                <f:ajax event="change" render="requestDataGrid" />
            </p:selectOneButton></td>
    </tr>
    <tr>
        <td><p:dataGrid id="requestDataGrid" var="tBusinessPartnerRequestInfo" value="#{inviteRequestManagedBean.filterBusinessRequest()}" columns="1"
                rows="2">
                <p:column>
                    <div>
                        <table border="0" width="100%">
                            <tr>
                                <td><p:graphicImage value="#{tBusinessPartnerRequestInfo.partySender_imageUrl}" /></td>
                                <td>
                                    <div>
                                        <table border="0" width="100%">
                                            <tr>
                                                <td><h:outputLabel value="#{tBusinessPartnerRequestInfo.requestDate}" /></td>
                                            </tr>
                                            <tr>
                                                <td><h:outputLabel value="#{tBusinessPartnerReques`enter code here`tInfo.partySender_fullName}" /></td>
                                            </tr>
                                        </table>
                                    </div>
                                </td>
                                <td><p:commandButton id="acceptCommonButton" value="#{inviteRequest_msg.accept}" process="@this"
                                        actionListener="#{inviteRequestManagedBean.acceptRequest(tBusinessPartnerRequestInfo.id)}">
                                    </p:commandButton></td>
                                <td><p:commandButton id="noNowCommonButton" value="#{inviteRequest_msg.notnow}"
                                        actionListener="#{inviteRequestManagedBean.notNowRequest(tBusinessPartnerRequestInfo.id)}">
                                    </p:commandButton></td>
                            </tr>
                        </table>
                    </div>
                    <hr />
                </p:column>
            </p:dataGrid> <p:panel>


            </p:panel></td>
    </tr>
</table>

我该如何解决这个问题?

谢谢。

4

1 回答 1

2

我认为您可以在 ajax 请求中使用选项 partialSubmit 和 process 来仅处理必要的信息,如下所示:

<p:selectOneButton value="#{inviteRequestManagedBean.filterType}">
    <f:selectItem itemLabel="#{inviteRequest_msg.request}" itemValue="request" />
    <f:selectItem itemLabel="#{inviteRequest_msg.archive}" itemValue="archive" />

    <f:ajax event="change" render="requestDataGrid" partialSubmit="true" process="@this" />
</p:selectOneButton>

如果这解决了您的问题,您可以在 primefaces 展示中看到更多:

部分提交

部分过程

于 2013-08-07T04:05:48.093 回答