我刚开始学习JSF和PrimeFaces,每当我解决一个问题(在您的帮助下),另一个问题就会出现。我有一个数据表格显示了一些关于应用程序用户的数据;在最后一列,一个命令按钮调用对话框允许相应的数据进行编辑。该对话框实际上与支持Bean交互,因为字段使用现有数据正确预编译,但是"提交更改"命令按钮不会触发适当的
我已经搜索到处寻找解决方案,但PrimeFaces论坛上的线程和Stack Overflow上的任何问题都没有帮助我:我尝试了所有组合
谢谢大家!
编辑:我包含了更多的xhtml。只是为了清楚起见:在数据表格中,我正在实现单选和多选机制。单选由最后一列中的
xhtml文件:
editUser()
方法!我已经搜索到处寻找解决方案,但PrimeFaces论坛上的线程和Stack Overflow上的任何问题都没有帮助我:我尝试了所有组合
action
,actionListener
,内部<h:form>
,外部<h:form>
,甚至可怕的嵌套<h:form>
,但基础方法仍然未被调用。谢谢大家!
编辑:我包含了更多的xhtml。只是为了清楚起见:在数据表格中,我正在实现单选和多选机制。单选由最后一列中的
editButton
执行,并触发引发痛苦的editDialog
,而多选则由第一列中的复选框启用,并由表格底部的一个commandButton定位,该按钮删除所有选定的用户;当然,它们将选择存储在支持bean中的不同字段中(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>
Backing bean
@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
}