Primefaces: <p:dataTable>中的<p:ajax>在我更新DataTable后多次调用方法

3
问题出现在“p:ajax事件=“rowDblselect”listener =“#{companyBean.update()}”...”,当我第一次双击时,“update()”方法被调用一次(完美!),但之后当我按下commandButton“button1”并再次双击组件时,“update()”将被调用两次。当我再重复一次时,“update()”将被调用3次……这非常奇怪!!我认为当我使用commandButton更新datatable时,ajax事件会保持升级状态。我不知道(?)......有人可以帮我解决吗?
<h:panelGrid id="panel" columns="5">
  <p:commandButton id="button1"  value="Search" actionListener="#{                     
     companyBean.search()}" update="dataTable"/>          
</h:panelGrid>

<p:dataTable id="dataTable" var="companyTO" value="#{companyBean.companiesTO}"                      
  selection="#companyBean.selectedCompanyTO}" rowKey="#{companyTO}"                   
  emptyMessage="" selectionMode="single" >   

 <p:ajax event="rowDblselect" listener="#{companyBean.update()}" immediate="true"   
        process="@this" />

 <p:column >

     ...
<p:dataTable>

注意:当我删除“update = dataTable”时,“event = rowDblselect”就可以完美工作,并且只调用方法一次。因此,问题在于更新。

我在这里找到了相同的问题:https://stackoverflow.com/questions/11904556/updating-datatable-with-own-datamodel-calls-method-more-and-more


看一下你生成的HTML代码。可能你不止一次调用了这个方法。在companyBean.search()方法中,你具体在做什么? - Aritz
1个回答

1

尝试移除你的ajax事件的immediate属性,然后在你的commandbutton中添加以下属性:

process="@this" partialSubmit="true" ajax="true"

事件:

   <p:ajax event="rowDblselect" listener="#{companyBean.update()}" process="@this" partialSubmit="true" />

按钮:
 <p:commandButton id="button1"  value="Search" actionListener="#{                     
         companyBean.search()}" update="dataTable" process="@this" partialSubmit="true" ajax="true"/> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接