datasource mapping doesn't work when droppable

2019-08-02 18:09发布

问题:

This is the main view which contains the draggable items. In this view I have a ui:include for including a UI fragment that also has the drop area.

mainView.xhtml

<p:dataList id="outerList" var="varOuter" value="#{myVO.getOuterList()}"> 
    <div>
        <span>#{varOuter.someVal}</span>                                        
    </div>  

    <p:dataList id="innerList" var="innerVar" value="#{myVO.getInnerList()}">
        <div class="crew-list">
            <h:form>                                                            
                <h:panelGroup id="draggableItem" layout="block">
                        <span>#{innerVar.someVal}</span>                                                
                </h:panelGroup>                                                                                                                                                             
                <p:draggable for="draggableItem" opacity="0.5" scope="ab"
                    revert="true" helper="clone" appendTo="@(body)" zindex="4" >                                                        
                </p:draggable>                                                      
            </h:form>   
         </div>
     </p:dataList>
</p:dataList>   
 ...

<ui:include src="fragment.xhtml">
        <ui:param name="param" value="#{paramVal}" />                                            
</ui:include>                           

fragment.xhtml

<p:dataList id="list" var="pos" value="#{myVO.getPositions()}" rowIndexVar="rowIndex">
        <ui:fragment rendered="#{!pos.isFilled()}">
            <h:panelGroup layout="block" id="dropArea">
                <span>Drop Here</span>              
            </h:panelGroup>    
            <p:droppable for="dropArea" hoverStyleClass="active"
                    scope="ab" datasource=":outerList:innerList">
                <p:ajax listener="#{crewChangeVO.onDrop}" update="list" />
                <f:attribute name="index" value="#{rowIndex}" />
            </p:droppable>
        </ui:fragment>
</p:dataList>

Now the problem that I run into is that, I am unable to map the datasource on the droparea correctly. Without datasource the drag-drop works but I don't get the data (dragged object) in my bean method and I need a way to know which object was dragged.

Would appriciate any input on how to achive this functionality.

Update Using a single(non-nested) dataList as the source with a form outside it works. But the problem is that it doesn't work for a nested list. So, for now I am proceeding with design changes and removing the nested list.