2014-01-21 4 views
2

Я только начал изучать JSF и PrimeFaces, и как только я решаю проблему (с вашей помощью), возникает другая. У меня есть данные, показывающие некоторые данные о пользователях моего приложения; в последнем столбце commandButton вызывает диалог, позволяющий редактировать соответствующие данные. Диалог фактически взаимодействует с бэк-файлом, поскольку поля правильно предварительно скомпилированы с существующими данными, но команда «Отправить изменения» не запускает соответствующий метод editUser()!Основная функция commandButton внутри диалога не запускает метод bean-метода

Я искал везде для решения моей проблемы, но ни один из потоков на форумах PrimeFaces, ни какой-либо вопрос здесь на переполнение стека не помогло мне: Я пробовал все комбинации action, actionListener, внутренний <h:form>, внешний <h:form>, даже страшный вложенный <h:form>, но основной метод все еще не вызывается.

Спасибо всем, люди!

EDIT: Я включил еще несколько xhtml. Просто чтобы быть ясным: в datatable я реализую как одиночные, так и множественные механизмы выбора. Единственный выбор выполняется в последнем столбце editButton и запускает editDialog, что дает мне боль, в то время как множественный выбор активируется флажками в первом столбце и нацелен на команду Command в нижней части таблицы, которая удаляет всех выбранных пользователей ; конечно, они сохраняют выборки в разных полях в бэкбоне (selectedUser и selectedUsers[], соответственно).

Файл XHTML

<h:form id="tableForm"> 
    <p:dataTable id="userList" var="user" value="#{userListBean.userList}" 
     selection="#{userListBean.selectedUsers}" rowKey="#{user.username}"> 

     <!-- this is a checkbox column I use for multiple selection --> 
     <p:column selectionMode="multiple" style="width:2%"/> 

     <!-- other datatable columns --> 

     <!-- this is the button column that triggers the dialog --> 
     <p:column style="width:4%"> 
      <p:commandButton id="editButton" update=":tableForm:editUserData" 
       oncomplete="PF('editDialog').show()" title="Edit" icon="ui-icon-pencil"> 
       <f:setPropertyActionListener target="#{userListBean.selectedUser}" 
        value="#{user}" /> 
      </p:commandButton> 
     </p:column> 
    </p:datatable> 

    <p:dialog id="editDlg" widgetVar="editDialog" header="Edit User" 
     showEffect="fade" hideEffect="fade" modal="true" dynamic="true"> 
     <h:panelGrid columns="6" id="editUserData"> 

      <p:outputLabel for="editUsername">Username:</p:outputLabel> 
      <p:inputText disabled="true" id="editUsername" value="#{userListBean.selectedUser.username}" /> 
      <p:message for="editUsername" /> 

      <!-- and other fields like that --> 

     </h:panelGrid> 

     <p:commandButton id="submitChanges" action="#{userListBean.editUser()}" 
      value="Submit changes" oncomplete="PF('editDialog').hide();" /> 
    </p:dialog> 
</h:form> 

Резервное компонентов-

@ManagedBean(name="userListBean") 
@ViewScoped 
public class UserListBean { 
    private UserDTO selectedUser; 

    public UserListBean() { 

    } 

    //some methods... 

    public String editUser() { 
     System.out.println("------------------ EDIT TRIGGERED! -------------------"); 
     System.out.println(selectedUser.getUsername()); 
     //this stuff never gets printed, so the method is never called! 
    } 

    //getters and setters 
} 
+0

было бы неплохо, если бы вы могли опубликовать больше своих xhtml –

+0

Добавил больше xhtml и некоторых дополнительных заметок! Еще раз спасибо. @LeonardoKenji – thequanticlad

+0

Диалог должен иметь свою форму. – BalusC

ответ

2

На самом деле, единственное, что не пришел на мой взгляд, оказался тот, который работал. я выяснял мой вопрос с помощью трех форм (как я уже упоминал в моем вопросе, я уже опробованы все возможные комбинации одного и двух форм, даже вложенные из них), как это:

<h:form id="tableForm"> 
    <!-- here lies the p:dataTable --> 
</h:form> 

<p:dialog> 
    <h:form id="dialogForm"> 
     <!-- here lies the h:panelGrid with the editable fields --> 
    </h:form> 
    <h:form id="buttonForm"> 
     <!-- and HERE goes the commandButton, alone --> 
    </h:form> 
</p:dialog> 

Похоже каждый решает эту проблему способами, которые не работают для других :).

+1

Это не будет отправлять данные из редактируемых полей. То, что это «работает» для вас, в свою очередь, говорит о наличии ошибки проверки/преобразования в одном из тех редактируемых полей, для которых вы никогда не отображали сообщение лиц. – BalusC

+0

Сдача commandButton непосредственно под тегом формы работала и для меня. Приветствия. – fuzzyanalysis

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