PrimeFaces ManyCheckbox ArrayList 未在模态对话框内更新
PrimeFaces ManyCheckbox ArrayList not Updating inside modal dialog
我有一个模态对话框,用户可以在其中根据另一个用户 select 和 deselect 角色,然后将其提交到数据库进行更新。
然而,在调试之后,支持 ManyCheckbox
的 ArrayList
没有得到更新,而 selectedRoles
ArrayList
仍然保持原来的状态。
例如:
我加载应用程序
数据库中有一个用户角色为'admin'
我尝试编辑此用户,对话框打开,'admin' 复选框已 selected。
我点击 'user' 角色复选框并点击提交
selectedRoles 数组仍然只是 'admin' 而不是 'admin' 和 'user'
这是我的对话框模式:
<p:dialog header="Editing User ID: #{usersView.viewUser}" id="editUserDialog" widgetVar="editUserDialog" modal="true" appendTo="@(body)">
<h:form id="editUserForm">
<p:selectManyCheckbox id="roleSelect" value="#{usersView.selectedRoles}" layout="grid" columns="3">
<f:selectItems value="#{rolesView.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role.name}" />
</p:selectManyCheckbox>
<p:separator />
<p:commandButton process="@this" update=":form:tabs:adminView:userTable:userRoleOutput" value="Submit" id="EditUserSubmitButton" actionListener="#{usersView.editUserRole}" oncomplete="PF('editUserDialog').hide();" />
</h:form>
</p:dialog>
用户视图:
@ManagedBean(name="usersView", eager=true)
@ApplicationScoped
private ArrayList<String> selectedRoles;
public Arraylist<String> getSelectedRoles()
{
return this.selectedRoles;
}
public void setSelectedRoles(ArrayList<String> roles)
{
this.selectedRoles = roles;
}
public void editUserRole(ActionEvent actionEvent)
{
// This method literally just loops through all users and matches the one we're looking at
User user = findUser();
if (user != null)
{
// gives user checked roles in database and local session
addSelectedRoles(user);
ArrayList<String> rolesToRemove = user.getRoleNames();
rolesToRemove.removeAll(selectedRoles);
// removes user unchecked roles in database and local session
removeSelectedRoles(user, rolesToRemove);
}
else
{
// Handle exception...
}
}
我在一个受限的 VM 上工作,所以我不能复制和粘贴,这是我能得到的所有信息post,我相信这就足够了。
非常感谢任何帮助。
我通过删除 process="@this"
解决了我的问题,现在 ArrayList 正在更新。
process="@this"
表示 commandLink 的当前组件及其未更新的原因。
我有一个模态对话框,用户可以在其中根据另一个用户 select 和 deselect 角色,然后将其提交到数据库进行更新。
然而,在调试之后,支持 ManyCheckbox
的 ArrayList
没有得到更新,而 selectedRoles
ArrayList
仍然保持原来的状态。
例如:
我加载应用程序
数据库中有一个用户角色为'admin'
我尝试编辑此用户,对话框打开,'admin' 复选框已 selected。
我点击 'user' 角色复选框并点击提交
selectedRoles 数组仍然只是 'admin' 而不是 'admin' 和 'user'
这是我的对话框模式:
<p:dialog header="Editing User ID: #{usersView.viewUser}" id="editUserDialog" widgetVar="editUserDialog" modal="true" appendTo="@(body)">
<h:form id="editUserForm">
<p:selectManyCheckbox id="roleSelect" value="#{usersView.selectedRoles}" layout="grid" columns="3">
<f:selectItems value="#{rolesView.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role.name}" />
</p:selectManyCheckbox>
<p:separator />
<p:commandButton process="@this" update=":form:tabs:adminView:userTable:userRoleOutput" value="Submit" id="EditUserSubmitButton" actionListener="#{usersView.editUserRole}" oncomplete="PF('editUserDialog').hide();" />
</h:form>
</p:dialog>
用户视图:
@ManagedBean(name="usersView", eager=true)
@ApplicationScoped
private ArrayList<String> selectedRoles;
public Arraylist<String> getSelectedRoles()
{
return this.selectedRoles;
}
public void setSelectedRoles(ArrayList<String> roles)
{
this.selectedRoles = roles;
}
public void editUserRole(ActionEvent actionEvent)
{
// This method literally just loops through all users and matches the one we're looking at
User user = findUser();
if (user != null)
{
// gives user checked roles in database and local session
addSelectedRoles(user);
ArrayList<String> rolesToRemove = user.getRoleNames();
rolesToRemove.removeAll(selectedRoles);
// removes user unchecked roles in database and local session
removeSelectedRoles(user, rolesToRemove);
}
else
{
// Handle exception...
}
}
我在一个受限的 VM 上工作,所以我不能复制和粘贴,这是我能得到的所有信息post,我相信这就足够了。
非常感谢任何帮助。
我通过删除 process="@this"
解决了我的问题,现在 ArrayList 正在更新。
process="@this"
表示 commandLink 的当前组件及其未更新的原因。