0

我想为 ap:droppable 组件设置两个 ajax 侦听器。

那行得通,但我的听众每个人都被叫了两次。

<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 事件?

4

2 回答 2

0

我找到了解决我自己问题的方法。我只使用一个 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);
于 2013-10-04T12:39:31.753 回答
0

我强烈建议您不要为同一事件设置两个 ajax 侦听器。这会增加客户端/服务器流量,执行多个 ajax 请求,从而使您的系统变慢。相反,只执行其中一个并在那里执行您的整个逻辑。

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

为了获得丢弃的对象,您应该遵循展示中指定的签名:

public void onDrop(DragDropEvent event) {  
    Group group = (Group) event.getData();  
}  
于 2013-10-04T09:19:48.210 回答