2016-06-29 6 views
0

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

Однако, после отладки, то ArrayList, что подпирает ManyCheckbox не обновляется, а selectedRolesArrayList остается то, что он изначально был.

Например:

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

  2. Существует один пользователь в базе данных с ролью «администратора»

  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> 

UserView:

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

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

Любая помощь очень ценится.

+0

@BalusC мой плохой, stackoverflow всегда рекомендует его как тег, я буду иметь это в виду с будущими вопросами. – James

+0

Можете ли вы опубликовать свой код бэкбона – Ankit

+0

@Ankit Я опубликовал это сейчас, надеюсь, что это поможет. – James

ответ

0

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

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