Soirée!Ajouter des entités à un <Collection> dans JSF en utilisant selectonemenu et/ou selectmanymenu
J'ai une structure de base de données qui inclut une table de jointure (groupes d'utilisateurs) qui relie l'entité Utilisateurs aux entités du groupe à des fins d'autorisation. C'est une relation plusieurs-à-plusieurs (les utilisateurs sont le propriétaire). En suivant les conseils fournis par BalusC dans d'autres publications, j'utilise le convertisseur personnalisé SelectItemsConverter fourni par le framework Omnifaces qui me permet de remplir correctement le menu déroulant avec les entités du groupe mais je n'arrive pas à trouver la syntaxe correcte puis ajoutez-les aux groupes détenus par l'entité Users. Dans l'état actuel des choses, le code va essayer de convertir une entité de groupe en un résultat terminal! Après avoir creusé un peu, je me demande si j'ai besoin de lier la référence à la vue d'une façon ou d'une autre et de passer la référence à la méthode Add de groupe quand le formulaire est soumis mais cela semble un peu maladroit et je ne trouve rien cela confirme ma théorie. Pointers quelqu'un?
utilisateurs entité:
@Entity
@Table(name = "Users")
@XmlRootElement
...
public class Users implements Serializable {
...
@JoinTable(name = "User_Groups", joinColumns = {
@JoinColumn(name = "User_ID", referencedColumnName = "User_ID")}, inverseJoinColumns = {
@JoinColumn(name = "Group_ID", referencedColumnName = "Group_ID")})
@ManyToMany
private Collection<Groups> groupsCollection;
...
entité Groupes:
@Entity
@Table(name = "Groups")
...
public class Groups implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "Group_ID")
private Integer groupID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "Group_Name")
private String groupName;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "Group_Desc")
private String groupDesc;
@ManyToMany(mappedBy = "groupsCollection")
private Collection<Users> usersCollection;
...
fragment de code
de créer des utilisateurs Page JSF:
...
<h:outputLabel value="#{bundle.CreateUsersLabel_groups}" for="groupsCollection" />
<h:selectOneMenu id="groupsCollection" value="#{usersController.selected.groupsCollection}" title="#{bundle.CreateUsersTitle_groups}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{groupsController.itemsAvailableSelectOne}" />
</h:selectOneMenu>
...
Vous n'utilisez pas 'h: selectOneMenu' correctement. Ce composant renvoie une seule sélection, pas une collection comme vous le prétendez ('# {usersController.selected.groupsCollection}'). –
Fair point. Je fais évidemment quelque chose de mal mais qu'est-ce que j'utilise à la place? J'ai besoin de remplir une propriété Collection dans le champ Utilisateurs avec une (ou plusieurs) entités Groupes. Le SelectOneMenu (ou une alternative) doit être rempli avec ces entités, pas la Collection. – rustproofFish