2016-06-29 7 views
0

J'ai une boîte de dialogue modale, dans laquelle un utilisateur peut sélectionner et désélectionner des rôles en fonction d'un autre utilisateur, puis les soumettre à la base de données à mettre à jour.PrimeFaces ManyCheckbox ArrayList pas de mise à jour dans la boîte de dialogue modale

Cependant, après le débogage, le ArrayList qui sauvegarde la ManyCheckbox ne sont pas mis à jour, et le reste à selectedRolesArrayList ce qu'il était à l'origine.

Par exemple:

  1. Je charge l'application

  2. Il y a un utilisateur dans la base de données avec le rôle « admin »

  3. je tente de modifier cet utilisateur et la boîte de dialogue ouvre La case à cocher 'admin' est sélectionnée.

  4. je clique sur le « utilisateur » case rôle et cliquez sur soumettre

  5. Le tableau selectedRoles est toujours juste « admin » au lieu de « admin » et « utilisateur »

Voici mon dialogue modale:

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

Je travaille sur une machine virtuelle restreinte, donc je ne peux pas copier et coller et ce sont toutes les informations que je peux poster, ce que je crois suffisant.

Toute aide est grandement appréciée.

+0

@BalusC mon mauvais, stackoverflow le recommande toujours comme une étiquette, je garderai cela à l'esprit avec des questions futures. – James

+0

pouvez-vous poster votre code de haricot backing – Ankit

+0

@Ankit J'ai posté ce maintenant, j'espère que cela aide. – James

Répondre

0

J'ai résolu mon problème en supprimant process="@this" et maintenant la ArrayList est mise à jour.

process="@this" signifie que le composant actuel du commandLink et donc pourquoi il n'était pas mis à jour.