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 à selectedRoles
ArrayList
ce qu'il était à l'origine.
Par exemple:
Je charge l'application
Il y a un utilisateur dans la base de données avec le rôle « admin »
je tente de modifier cet utilisateur et la boîte de dialogue ouvre La case à cocher 'admin' est sélectionnée.
je clique sur le « utilisateur » case rôle et cliquez sur soumettre
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.
@BalusC mon mauvais, stackoverflow le recommande toujours comme une étiquette, je garderai cela à l'esprit avec des questions futures. – James
pouvez-vous poster votre code de haricot backing – Ankit
@Ankit J'ai posté ce maintenant, j'espère que cela aide. – James