Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 使用primefaces执行两次Ajax侦听器_Jsf_Primefaces - Fatal编程技术网

Jsf 使用primefaces执行两次Ajax侦听器

Jsf 使用primefaces执行两次Ajax侦听器,jsf,primefaces,Jsf,Primefaces,我希望有两个ajax监听器用于p:droppable组件 这是可行的,但我的听众每人被呼叫两次 <ui:repeat id="orderGroups" value="#{omsOrderActionBean.order.orderGroups}" var="group"> <p:panel > <p:fieldset id="selectedLineItems" style="margin-top:20px"> <p:dataTabl

我希望有两个ajax监听器用于p:droppable组件

这是可行的,但我的听众每人被呼叫两次

<ui:repeat id="orderGroups" value="#{omsOrderActionBean.order.orderGroups}" var="group">
  <p:panel > 
   <p:fieldset id="selectedLineItems" style="margin-top:20px">
    <p:dataTable>
         ...
    </p:dataTable>
   </p:fieldset>
 </p:panel>
 <p:droppable for=":frmItem:tabViewSections:orderGroups:selectedLineItems"
  tolerance="touch" activeStyleClass="ui-state-highlight" datasource=":frmItem:tabViewSections:availableItems" onDrop="handleDrop">
    <p:ajax listener="#{omsOrderActionBean.setSelectedOrderGroup(group)}" immediate="true" />
    <p:ajax listener="#{omsOrderActionBean.onArticleDrop}" update=":frmItem:tabViewSections:outpOrderGroups :frmItem:tabViewSections:availableItems" />
 </p:droppable>
</ui:repeat>

...

你知道如何避免这种行为吗?或者如何将参数传递给和ajax事件?

我强烈建议您不要为同一事件使用两个ajax侦听器。这会增加客户机/服务器流量,执行多个ajax请求,从而降低系统速度。相反,只执行其中一个,然后在那里执行整个逻辑

<p:ajax listener="#{omsOrderActionBean.onDrop}" 
    update=":frmItem:tabViewSections:outpOrderGroups :frmItem:tabViewSections:availableItems" />

我找到了解决我自己问题的办法。我只使用一个ajax侦听器。在这个侦听器中,我得到包含组位置的dropId。然后,我简单地将其转换为整数,并从我的订单列表中获取:

// DropId is of the form: orderGroups:0:selectedLineItems
String[] dropSplit = ddEvent.getDropId().split(":");
// Get the second part to retrieve the correct orderGroup:
int orderGroupPosition = Integer.parseInt(dropSplit[2]);
orderGroups.get(orderGroupPosition);

我希望他们两个都被处决。我的问题是他们都被执行了两次。我有四次处决,不是两次!我怎么能在同一个活动中做每件事呢?这个被抛弃的团体参加了这个活动。用它做你想做的。然后,执行ArticleDrop中的逻辑。处理后,更新所需内容。简单,一切都在一个电话!它不是删除的组,而是删除项目(数据)的组。我添加了更多的信息。请看。它还允许您获取放置对象的组件的id。我已经试过了,但是没有找到如何使用这个id检索OrderGroup java对象。
// DropId is of the form: orderGroups:0:selectedLineItems
String[] dropSplit = ddEvent.getDropId().split(":");
// Get the second part to retrieve the correct orderGroup:
int orderGroupPosition = Integer.parseInt(dropSplit[2]);
orderGroups.get(orderGroupPosition);