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 selectedRoles
ArrayList
bleibt, was es ursprünglich war.
Zum Beispiel:
ich die Anwendung laden
Es gibt ein Benutzer in der Datenbank mit Rolle 'admin'
Ich versuche, diesen Benutzer zu bearbeiten und den Dialog öffnet oben ist das Kontrollkästchen "admin" ausgewählt.
ich Sie auf die 'user' Rolle Checkbox und klicken Sie auf
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.
@BalusC meine schlechte, Stackoverflow empfiehlt es immer als ein Tag, ich werde dies bei zukünftigen Fragen berücksichtigen. – James
können Sie Ihren Backing-Bean-Code – Ankit
@Ankit posten Ich habe dies jetzt gepostet, hoffe es hilft. – James