我是Primefaces的新手。我正在从primefaces2.2迁移到primefaces3.1.1,因为我必须在应用程序中包含primefaces3.1.1的新功能。
应用程序中有一个dragndrop功能。它与primefaces2.2工作正常,但是当我根据primefaces3.1.1的规范进行更改时。 dragndrop功能无效。
实际上情景就像
我有一个数据表,我从数据库中获取值并显示。有一个treetable。
数据表行将在treetable区域上拖放。虽然这样做,但我已经编写了监听器,但它从未被调用过。
我在这里提供代码
workflow.xhtml
<p:fieldset id="workflowtabs" legend="Drop here" rendered="#{workflowStep2Bean.childCount gt 0}">
<p:outputPanel id="dropArea">
<p:treeTable id="testtable" value="#{workflowStep2Bean.root}" var="selected" rendered="#{not empty workflowStep2Bean.root}" >
<p:column rendered="#{selected.type eq 'Folder'}">
<p:commandButton icon="ui-icon ui-icon-folder-open" disabled="true"/>
</p:column>
<p:column rendered="#{selected.type eq 'Folder'}" >
<h:inputText value="#{selected.name}" />
</p:column>
</p:treeTable>
</p:outputPanel>
</p:fieldset>
<p:fieldset id="testfields" legend="#{msg.tests}" rendered="#{workflowStep2Bean.childCount gt 0}">
<p:dataTable id="teststable" value="#{workflowStep2Bean.tests}" var="testList" >
<p:column style="height: 20px" headerText="Drag">
<h:outputText id="dragIcon" styleClass="ui-icon ui-icon-arrow-4"/>
<p:draggable for="dragIcon" revert="true" scope="#{dragIcon.position}" stack=".ui-icon ui-icon-arrow-4"/>
</p:column>
<p:column headerText="Name">
<h:outputText value="#{testList.name}"></h:outputText>
</p:column>
</p:dataTable>
</p:fieldset>
<p:droppable for="workflowtabs" tolerance="touch" activeStyleClass="ui-state-highlight" datasource="teststable" onDrop="handleDrop">
<p:ajax listener="#{workflowStep2Bean.onTestDrop}" update="dropArea teststable" />
</p:droppable>
这是我的workflowStep2Bean.java
public void onTestDrop(DragDropEvent ddEvent) {
if (getTabs().size() > 0) {
TreeNode tab = getTabs().get(getTabs().size() - 1);
Test t = (Test) ddEvent.getData();
tests.remove(t);
((Tab) tab.getData()).getTests().add(t);
TreeNode tabC = new DefaultTreeNode(t, tab);
}
}
请告诉我我做错了什么。提前谢谢
我正在使用primefaces 3.1.1,Mojorra 2.1.3,Glassfish 3.1.1,JSF2.0
答案 0 :(得分:0)
我遇到了类似的问题,我通过以下方式解决了这个问题:
<p:droppable>
同时使用onDrop=""
参数和<p:ajax ... />
命令都不起作用。
根据https://stackoverflow.com/a/19223442/1431979中的解释,我首先删除了
中的onDrop="handleDrop()"
参数
<p:droppable for="PD" accept=".#{item.classeInverse}" onDrop="handelDrop()" />
并在页面加载后通过将三个以下事件侦听器附加到ui-droppable类来替换它:
jQuery(window).load(function(){
$(".ui-droppable").on("dragover", function() {
event.preventDefault();
event.stopPropagation();
$(this).addClass('dragging');
});
$(".ui-droppable").on("dragleave", function() {
event.preventDefault();
event.stopPropagation();
$(this).removeClass('dragging');
});
$(".ui-droppable").on("drop", function(event) {
event.preventDefault();
event.stopPropagation();
console.log("Dropped!");
});
});
然后你应该修改上面的on("drop"...
函数,使用<p:remoteCommand>
命令进行ajax调用。
希望这可以提供帮助。