2016-06-29 16 views
0

Ich verfüge über einen modalen Dialog, in dem ein Benutzer Rollen auf der Basis eines anderen Benutzers auswählen und abwählen kann und diese dann an die zu aktualisierende Datenbank senden kann.PrimeFaces ManyCheckbox ArrayList wird nicht innerhalb des modalen Dialogfelds aktualisiert

Doch nach Debugging, die ArrayList, die die ManyCheckbox sichert nicht aktualisiert, und die selectedRolesArrayList bleibt, was es ursprünglich war.

Zum Beispiel:

  1. ich die Anwendung laden

  2. Es gibt ein Benutzer in der Datenbank mit Rolle 'admin'

  3. Ich versuche, diesen Benutzer zu bearbeiten und den Dialog öffnet oben ist das Kontrollkästchen "admin" ausgewählt.

  4. ich Sie auf die 'user' Rolle Checkbox und klicken Sie auf

  5. Die selectedRoles Array 'admin' nur besteht, erfolgt nach wie vor nur statt 'admin' und 'user'

Hier ist mein Dialog modal:

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

Ich arbeite an einer eingeschränkten VM, also kann ich nicht kopieren und einfügen und das sind alle Informationen, die ich posten kann, was meiner Meinung nach genug ist.

Jede Hilfe wird sehr geschätzt.

+0

@BalusC meine schlechte, Stackoverflow empfiehlt es immer als ein Tag, ich werde dies bei zukünftigen Fragen berücksichtigen. – James

+0

können Sie Ihren Backing-Bean-Code – Ankit

+0

@Ankit posten Ich habe dies jetzt gepostet, hoffe es hilft. – James

Antwort

0

Ich löste mein Problem durch Entfernen process="@this" und jetzt wird die ArrayList aktualisiert.

process="@this" bedeutet, dass die aktuelle Komponente des BefehlsLink und daher warum es nicht aktualisiert wurde.

Verwandte Themen