2012-03-02 78 views
0

我是新來的primefaces。我正在從primefaces2.2遷移到primefaces3.1.1,因爲我必須在應用程序中包含primefaces3.1.1的新功能。<p:ajax>聽衆永遠不會叫

應用程序中有一個dragndrop功能。它與primefaces2.2工作正常,但是當我根據primefaces3.1.1的規範進行更改時。 dragndrop功能不起作用。

其實情景就像是

我有一個數據表,其中我是從數據庫中獲取價值和顯示。有一種可以治療的疾病。

數據錶行將被拖放到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,2.1.3 Mojorra,Glassfish的3.1.1,JSF2.0

+0

我不確定是否這是拖放功能不起作用的原因,但是在PrimeFaces的第3版中,您現在必須指定「p:dataTable」的'rowKey'屬性來正確更新行選擇。這個'rowKey'表示唯一標識'value'集合中bean的bean屬性。不幸的是,展示會忽略了這一點,希望Primefaces團隊能儘快更新。您可以在Primefaces手冊中獲得更多信息。 – 2012-03-02 12:57:52

+0

感謝您的評論。請給我發送primefaces手冊的鏈接以及鏈接,我可以看到指定數據表示例中的rowkey – Sharath 2012-03-05 07:42:47

+0

您可以在此處下載... http://www.primefaces.org/documentation.html – 2012-03-05 12:23:00

回答

0

我有一個類似的問題,我通過以下方式解決:

有一個<p:droppable>與一個onDrop=""參數和一個<p:ajax ... />命令imbeded沒有工作。

https://stackoverflow.com/a/19223442/1431979的解釋,我先刪除了onDrop="handleDrop()"說法在我

<p:droppable for="PD" accept=".#{item.classeInverse}" onDrop="handelDrop()" /> 

和頁面加載後連接三個如下因素事件偵聽器的用戶界面,可放開類替代它:

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調用。

希望這可以幫助。