0

我有一个模式对话框,用户可以在其中根据另一个用户选择和取消选择角色,然后将其提交到数据库以进行更新。

但是,在调试之后ArrayList,支持 的ManyCheckbox没有得到更新,并且selectedRoles ArrayList保持原来的状态。

例如:

  1. 我加载应用程序

  2. 数据库中有一个角色为“admin”的用户

  3. 我尝试编辑此用户并打开对话框,选中“管理员”复选框。

  4. 我单击“用户”角色复选框,然后单击提交

  5. 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...
    }
}

我正在使用受限的虚拟机,所以我无法复制和粘贴,这是我可以发布的所有信息,我相信这已经足够了。

任何帮助是极大的赞赏。

4

1 回答 1

0

我通过删除解决了我的问题process="@this",现在 ArrayList 正在更新。

process="@this"表示 commandLink 的当前组件,因此它没有更新。

于 2016-06-30T07:19:34.303 回答