2012-03-02 3 views
0

Я новичок в связях. Я переношусь из primefaces2.2 в primefaces3.1.1, потому что я должен включать новые функции primefaces3.1.1 в приложение.<p:ajax> прослушиватель никогда не называется

В приложении были функциональные возможности dragndrop. Он отлично работает с primefaces2.2, но когда я вносил изменения в соответствии со спецификациями primefaces3.1.1. Функциональность dragndrop не работает.

На самом деле сценарий, как

У меня есть DataTable, где я получаю значение из базы данных и отображение. Существует трещино.

Данную строку следует перетаскивать и опускать на подлежащую область. При этом я написал слушателя, но он никогда не называется.

Здесь я привожу код

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, 3.1.1 Glassfish, JSF2.0

+0

Я не уверен, что это причина, по которой функция переадресации не работает, но в версии 3 из PrimeFaces вам теперь нужно указать атрибут 'rowKey'' для параметра выбора строки для корректного обновления строки. Этот 'rowKey' представляет свойство bean, которое однозначно идентифицирует bean-элемент в коллекции' value'. К сожалению, витрина пренебрегает этим, надеюсь, команда Primefaces скоро ее обновит. Вы можете получить дополнительную информацию об этом в руководстве по интерфейсам. –

+0

Спасибо за ваш комментарий. Не могли бы вы послать мне ссылку руководства по разделам, а также ссылку, в которой я могу увидеть, как указывать строку в примере данных – Sharath

+0

. Вы можете скачать ее здесь ... http://www.primefaces.org/documentation.html –

ответ

0

У меня была аналогичная проблема, которую я решил следующим образом:

Having a <p:droppable> с аргументом onDrop="" и командой <p:ajax ... /> вложенной не работает.

После объяснения приведены в https://stackoverflow.com/a/19223442/1431979, я первый удалил onDrop="handleDrop()" аргумент в моем

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

и заменить его, прилагая три folowing слушателей событий в пользовательский интерфейс-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"..., чтобы выполнить вызов ajax, используя команду <p:remoteCommand>.

Надеюсь, это поможет.

Смежные вопросы