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

      Hello.
      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;
      
      @ManyToMany(TargetEntity=ro.ebsoft.doorcontrol.applogic.entity.UserGroup.class,
      cascade={CascadeType.MERGE, CascadeType.PERSIST})
      @JoinTable(name="UserGroup_Location",
      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;
      
       @ManyToMany(
       cascade={CascadeType.PERSIST, CascadeType.MERGE},
       mappedBy="userGroups",
       targetEntity=Location.class
       )
       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:convertEntity/>
       <s:selectItems value="#{locationList.resultList}" var="location" label="#{location.locationName}"/>
      </h:selectManyListbox>
      


      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;
      to
      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.