Я только начал изучать 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
}
было бы неплохо, если бы вы могли опубликовать больше своих xhtml –
Добавил больше xhtml и некоторых дополнительных заметок! Еще раз спасибо. @LeonardoKenji – thequanticlad
Диалог должен иметь свою форму. – BalusC