[jboss-user] [JBoss Seam] - selectManyListbox and SelectItem error
mgervais
do-not-reply at jboss.com
Mon Mar 19 11:37:13 EDT 2007
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({@NamedQuery(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
More information about the jboss-user
mailing list