PrimeFaces ManyCheckbox ArrayList не обновляется внутри модального диалога

У меня есть модальный диалог, в котором пользователь может выбирать и отменять выбор ролей на основе другого пользователя, а затем отправлять их в базу данных для обновления.

Однако после отладки ArrayList, поддерживающий ManyCheckbox, не обновляется, а selectedRoles ArrayList остается таким, каким он был изначально.

Например:

  1. я загружаю приложение

  2. В базе есть один пользователь с ролью admin.

  3. Я пытаюсь отредактировать этого пользователя, и открывается диалоговое окно с установленным флажком «admin».

  4. Я устанавливаю флажок «роль пользователя» и нажимаю «Отправить».

  5. Массив selectedRoles по-прежнему представляет собой просто «администратор» вместо «администратор» и «пользователь».

Вот мой модальный диалог:

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

Я работаю над виртуальной машиной с ограниченным доступом, поэтому я не могу копировать и вставлять, и это вся информация, которую я могу опубликовать, и я считаю, что этого достаточно.

Любая помощь приветствуется.


person James    schedule 29.06.2016    source источник
comment
@BalusC мой плохой, stackoverflow всегда рекомендует его в качестве тега, я буду помнить об этом, когда буду задавать вопросы.   -  person James    schedule 29.06.2016
comment
можете ли вы опубликовать код поддержки bean-компонента   -  person Ankit    schedule 29.06.2016
comment
@Ankit Я опубликовал это сейчас, надеюсь, это поможет.   -  person James    schedule 29.06.2016
comment
Пожалуйста, не превращайте свой вопрос в хамелеон. И ответы на одну часть должны быть не в вопросе а как ответ   -  person Kukeltje    schedule 30.06.2016


Ответы (1)


Я решил свою проблему, удалив process="@this", и теперь ArrayList обновляется.

process="@this" означает, что текущий компонент commandLink и, следовательно, почему он не обновлялся.

person James    schedule 30.06.2016