Hi,
I'm trying to use two selectManyListBox to assign a list of roles to a user.

  | <h:selectManyListbox value="#{rolemanager.source}" 
converter="#{rolemanager.converter}" size="5">
  |                                                                     
<f:selectItems value="#{rolemanager.items}" />
  |                                                                 
</h:selectManyListbox>
  |                                                              
  |                                                                 
<h:commandButton value="add" action="#{rolemanager.add}" />
  |                                                                 
<h:commandButton value="remove" action="#{rolemanager.remove}" />
  |                                                              
  |                                                                 
<h:selectManyListbox value="#{rolemanager.selected}" 
converter="#{rolemanager.converter}" size="5">
  |                                                                     
<f:selectItems value="#{rolemanager.destination}" />
  |                                                                 
</h:selectManyListbox>
  | 

when I click on "Add", the list "source" in role manager is a list of Role and 
not a list of SelectItem, I'd like to know if it's a normal behaviour... I 
expect to have a List of SelectItem...
the Complte code is 

RoleManager.java

  | @Stateful
  | @Scope(SESSION)
  | @Name("rolemanager")
  | public class RoleManagerBean implements RoleManager {
  |     
  |     @In(value="agaetisDatabase")
  |     private EntityManager em;
  |     
  |     @EJB
  |     private CompanyFacade company;
  |     
  |     private List<Role> roles;
  |     
  |     private List<SelectItem> items;
  |     
  |     private List<SelectItem> source=new ArrayList<SelectItem>();
  |     
  |     private List<SelectItem> destination=new ArrayList<SelectItem>();
  |     
  |     private List<SelectItem> selected=new ArrayList<SelectItem>();
  |     
  |     @Create
  |     public void loadData() {
  |             roles = company.findAllRoles(em);
  |             
  |             items=new ArrayList<SelectItem>(roles.size());
  |             for(Role role : roles)
  |                     items.add(new SelectItem(role, role.getRole()));
  |     }
  |     
  |     public List<Role> getRoles() {
  |             return roles;
  |     }
  |     
  |     public Converter getConverter() {
  |             
  |             return new Converter(){
  |                     public Object getAsObject(FacesContext context, 
UIComponent component, String value) throws ConverterException {
  |                             if(value==null)
  |                                     return null;
  |                             
  |                             for(Role role : roles)
  |                                     if(role.getRole().equals(value))
  |                                             return role;
  |                             return null;
  |                     }
  |                     public String getAsString(FacesContext context, 
UIComponent component, Object value) throws ConverterException {
  |                             return value==null ? null : 
((Role)value).getRole();
  |                     }
  |             };
  |     }
  | 
  |     public List<SelectItem> getItems() {
  |             return items;
  |     }
  |     
  |     public void setItems(List<SelectItem> items) {
  |             this.items = items;
  |     }
  |     
  |     public List<SelectItem> getDestination() {
  |             return destination;
  |     }
  |     
  |     public void setDestination(List<SelectItem> destination) {
  |             this.destination=destination;           
  |     }
  |     
  |     public List<SelectItem> getSource() {
  |             return source;
  |     }
  |     
  |     public void setSource(List<SelectItem> source) {
  |             this.source=source;             
  |     }
  |     
  |     public void setSelected(List<SelectItem> selected) {
  |             this.selected = selected;
  |     }
  |     
  |     public List<SelectItem> getSelected() {
  |             return selected;
  |     }
  |     
  |     public void add() {
  |             destination.addAll(source);
  |             source.clear();
  |     }
  |     
  |     public void remove() {
  |             source.addAll(destination);
  |             destination.clear();
  |     }
  |     
  |     @Destroy
  |     @Remove
  |     public void destroy() {
  |     }
  | 
  |     public void processValueChange(ValueChangeEvent event) throws 
AbortProcessingException {
  |             System.out.println(event);              
  |     }
  | }
  | 

Role.java

  | @Entity
  | @Table
  | @Scope(SESSION)
  | @NamedQueries([EMAIL PROTECTED](name = 
MappedQueries.ROLE_QUERY_FIND_BY_ROLE, query = "select r from Role r where 
r.role=:role") })
  | public class Role implements java.io.Serializable {
  | 
  |     private static final long serialVersionUID = 2;
  | 
  |     @Id
  |     @GeneratedValue(strategy = GenerationType.IDENTITY)
  |     @Column(precision = 3, scale = 0)
  |     private short idrole;
  | 
  |     @NotNull
  |     @Length(max=70)
  |     @Column(unique = true, nullable = false, length = 70)
  |     private String role;
  | 
  |     @Length(max=200)
  |     @Column(length = 200)
  |     private String description;
  | 
  |     @ManyToMany(mappedBy = "roles")
  |     private List<User> users;
  | 
  |     public Role() {
  |     }
  | 
  |     public Role(String role) {
  |             this.role = role;
  |     }
  | 
  |     public Role(String role, String description) {
  |             this(role);
  |             this.description = description;
  |     }
  | 
  |     public short getIdrole() {
  |             return idrole;
  |     }
  | 
  |     public void setIdrole(short idrole) {
  |             this.idrole = idrole;
  |     }
  | 
  |     public String getRole() {
  |             return role;
  |     }
  | 
  |     public void setRole(String role) {
  |             this.role = role;
  |     }
  | 
  |     public String getDescription() {
  |             return description;
  |     }
  | 
  |     public void setDescription(String description) {
  |             this.description = description;
  |     }
  | 
  |     public List<User> getUsers() {
  |             if (users == null)
  |                     users = new Vector<User>(0);
  |             return users;
  |     }
  | 
  |     public void setUsers(List<User> users) {
  |             this.users = users;
  |     }
  | 
  |     /*
  |      * (non-Javadoc)
  |      * 
  |      * @see java.lang.Object#hashCode()
  |      */
  |     @Override
  |     public int hashCode() {
  |             final int PRIME = 31;
  |             int result = 1;
  |             result = PRIME * result + idrole;
  |             return result;
  |     }
  | 
  |     /*
  |      * (non-Javadoc)
  |      * 
  |      * @see java.lang.Object#equals(java.lang.Object)
  |      */
  |     @Override
  |     public boolean equals(Object obj) {
  |             if (this == obj)
  |                     return true;
  |             if (obj == null)
  |                     return false;
  |             if (getClass() != obj.getClass())
  |                     return false;
  |             final Role other = (Role) obj;
  |             if (idrole != other.idrole)
  |                     return false;
  |             return true;
  |     }
  | 
  |     @PrePersist
  |     public void format() {
  |             role = Formatter.captializeFirstLetter(role);
  |     }
  | }

And the exception...

  | java.lang.IllegalArgumentException: Collection referenced by UISelectItems 
with binding '#{rolemanager.destination}' and Component-Path : {Component-Path 
: [Class: org.ajax4jsf.framework.ajax.AjaxViewRoot,ViewId: 
/credentials.xhtml][Class: javax.faces.component.html.HtmlForm,Id: 
credentials][Class: javax.faces.component.html.HtmlSelectManyListbox,Id: 
_id33][Class: javax.faces.component.UISelectItems,Id: _id34]} does not contain 
Objects of type SelectItem
  | 

Mickael

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4029354#4029354

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4029354
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to