在嵌套的dataTable中拖放

我正在使用primeface 4.0。

primeface 展示仅显示如何将draggabledroppable 。 但是,从来没有提到过如何拖拽那个draggable拖车。

我想创建一个dataTable:

  1. 每个td都有一个droppable放置的面板,可以将多个draggable面板拉拉出
  2. 这个dataTable的“保存数据”的后bean对象,我假设如果dataTable是2 * 2,则后端bean中将有4个List,每个都存储相应droppable区域的draggable对象列表。

有点像p:schedule的简单版本,允许事件在单元格之间拖放。

我的努力:

  1. 我设法使一些function工作,就像拖入一个droppable

  2. 但我不能 删除拖动的draggable因为p:draggable没有ajax事件drag将数据传递给后端bean,因为我在p:droppable drop事件。(有一种方法可以使用JQuery draggable event startstop将col和row num传递给后面的bean,但我不确定这是一个好方法去)

  3. 我不认为我的实现是正确的方法,因为有一些奇怪的错误 ,有时我从ddEvent.getData()获得的拖动对象不正确。 (我猜它与p:droppable的唯一dataSource有关。问题1469 )


更新:我认为主要问题是p:droppable只绑定一个数据源,所以ddEvent.getData()总是从绑定数据源获取’对象’,我的问题是我有多个可放置区域,每个都需要绑定多个数据源


。 太糟糕了我无法发布截图…

这是我的代码:xthml:Shifts …

 

回豆:

  public List getDailyShift(String eid, Date date) { return this.tmpSchedule.getShifts(eid).get(date); } public void onShiftDrop(DragDropEvent ddEvent) { ShiftDto shift = ((ShiftDto) ddEvent.getData()); Date weekday = (Date) ddEvent.getComponent().getAttributes() .get("weekday"); String eid = (String) ddEvent.getComponent().getAttributes().get("eid"); System.out.println("onShiftDrop: " + shift); System.out.println("dropedDate: " + weekday); System.out.println("dropedEmployee: " + eid); this.tmpSchedule.addShift(eid, weekday, shift); } 

tmpSchedule只是一个像容器一样的地图,其中包含每位员工的每周class次。

您始终可以将Drag-Drop从一个容器拖动到另一个容器。

在p:table或p:面板中说一个可拖动的行在ap:panelgrid(A面)到Droppable p:outPanel(B面)你将维护两个List,一个用于A侧,另一个用于B侧。

并将A端设置为可拖放,将B端设置为可拖动以具有循环拖放行为(两者将充当彼此可放置标记的数据源)并利用ddEvent.getData在对象列表中添加和删除控制器方面。

对于上述要求,您可以实现panelGrid并具有这样的多个关系。

要么

使用dragabblerows =“true”和draggableColumns =“true”来使用P:table参数中的行和列。 :p