我想为p: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事件?
答案 0 :(得分:0)
我强烈建议你不要为同一事件安排两个ajax听众。这会增加客户端/服务器流量,执行多个使您的系统变慢的ajax请求。相反,只执行其中一个并在那里执行整个逻辑。
<p:ajax listener="#{omsOrderActionBean.onDrop}"
update=":frmItem:tabViewSections:outpOrderGroups :frmItem:tabViewSections:availableItems" />
为了获取被删除的对象,您应该遵循showcase中指定的签名:
public void onDrop(DragDropEvent event) {
Group group = (Group) event.getData();
}
答案 1 :(得分: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);