2013-03-12 58 views
3

我有一个使用Ajax的合成组件,<p:selectOneButton/>,当Ajax调用actionListener<p:commandButton/>它调用10次然后运行该方法。我认为这个问题的原因是<p:dataGrid/>,因为当我把我的<p:commandButtton/><p:dataGrid/>中取出时,它正常工作,但是当我在<p:dataGrid/>中使用它时,Ajax调用actionListener不止一次。Ajax调用方法多于一次在jsf

这里是.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> 

我怎样才能解决这个问题?

谢谢。

回答

2

我想你可以使用你的Ajax请求的选项partialSubmit和过程仅处理必要的信息,这样的事情:

<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展示:

Partial submit

Partial process