ManytoMany and h:selectOneMenu problem
jackt Jan 26, 2009 4:04 PMHello I want to do a manytomany relation two entity and i want using h:selectOneMenu but its giving this error :
avax.faces.component.UIInput updateModel SEVERE: /employee.xhtml @26,76 value="#{employeeHome.instance.projects}": java.lang.IllegalArgumentException: argument type mismatch java.lang.IllegalArgumentException: argument type mismatch
package org.domain.ManytoMany.entity; import java.io.Serializable; import java.util.Set; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.ManyToMany; import javax.persistence.Version; import org.hibernate.validator.Length; @Entity public class Employee implements Serializable { // seam-gen attributes (you should probably edit these) private Long id; private Integer version; private String name; protected Set <Project> projects; // add additional entity attributes // seam-gen attribute getters/setters with annotations (you probably should edit) @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Version public Integer getVersion() { return version; } private void setVersion(Integer version) { this.version = version; } @Length(max = 20) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(mappedBy="employees") public Set<Project> getProjects() { return projects; } public void setProjects(Set<Project> projects) { this.projects = projects; } }
package org.domain.ManytoMany.entity; import java.io.Serializable; import java.util.Set; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.ManyToMany; import javax.persistence.Version; import org.hibernate.validator.Length; @Entity public class Project implements Serializable { // seam-gen attributes (you should probably edit these) private Long id; private Integer version; private String name; protected Set <Employee> employees; // add additional entity attributes // seam-gen attribute getters/setters with annotations (you probably should edit) @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Version public Integer getVersion() { return version; } private void setVersion(Integer version) { this.version = version; } @Length(max = 20) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany public Set<Employee> getEmployees() { return employees; } public void setEmployees(Set<Employee> employees) { this.employees = employees; } }
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> <ui:define name="body"> <h:form id="employeeForm"> <rich:panel> <f:facet name="header">employee</f:facet> <s:decorate id="nameField" template="layout/edit.xhtml"> <ui:define name="label">Name</ui:define> <h:inputText id="name" required="true" value="#{employeeHome.instance.name}"/> </s:decorate> <s:decorate id="projectField" template="layout/edit.xhtml"> <ui:define name="label">Project</ui:define> <h:selectOneMenu value="#{employeeHome.instance.projects}"> <s:selectItems var="project" value="#{projectList.resultList}" label="#{project.name}"></s:selectItems> <s:convertEntity></s:convertEntity> </h:selectOneMenu> </s:decorate> <div style="clear:both"/> </rich:panel> <div class="actionButtons"> <h:commandButton id="save" value="Save" action="#{employeeHome.persist}" rendered="#{!employeeHome.managed}"/> <h:commandButton id="update" value="Save" action="#{employeeHome.update}" rendered="#{employeeHome.managed}"/> <h:commandButton id="delete" value="Delete" action="#{employeeHome.remove}" immediate="true" rendered="#{employeeHome.managed}"/> <s:button propagation="end" id="cancel" value="Cancel" view="/employeeList.xhtml"/> </div> </h:form> </ui:define> </ui:composition>
what is wrong ?