5 Replies Latest reply on Feb 6, 2008 4:34 AM by stephendv

    h:SelectManyListbox, s:SelectItems and Many-to-Many mapping

    Ovidiu Stanciu Newbie

      Not sure if I'm addressing a known bug, but here it goes.

      I'm using Seam 2.0.0.GA, JBoss AS 4.2.2, JDK 1.5

      I have a Many-to-Many mapping:
      Location entity:

      private Collection<UserGroup> userGroups;
      cascade={CascadeType.MERGE, CascadeType.PERSIST})
      joinColumns={@JoinColumn(name="locationId")}, inverseJoinColumns={@JoinColumn(name="userGroupId")})
      public Collection<UserGroup> getUserGroups() {
       return userGroups;
      public void setUserGroups(Collection<UserGroup> userGroups) {
       this.userGroups = userGroups;

      and UserGroup entity
      private Collection<Location> locations = null;
       cascade={CascadeType.PERSIST, CascadeType.MERGE},
       public Collection<Location> getLocations() {
       return locations;
       public void setLocations(Collection<Location> locations) {
       this.locations = locations;

      When adding a new UserGroup, a user can select any number of locations for the group.

      userGroup.xhtml :
      <h:selectManyListbox id="locationsListBox" value="#{userGroupHome.instance.locations}"
       disabled="#{not s:hasRole('admin')}">
       <s:selectItems value="#{locationList.resultList}" var="location" label="#{location.locationName}"/>

      When I try to save a new group (for instance, with the 2 top locations from the listbox), there's a failed validation. Faces Message:
      Conversion Error setting value '0 1' for '#{userGroupHome.instance.locations}'.

      I understand there's a problem binding a Set to a h:selectManyListBox (should use ArrayList). When trying to change
      Collection<Location> locations;
      ArrayList<Location> locations;
      Hibernate notifies that it does not support it (mapping many to many to something else than a Collection).

      What to do? Does anyone have a fix for this problem?

      Thank you for your time.