[2.0.0.CR1] selectManyListbox + convertEntity yields convers
jeilong Oct 1, 2007 9:49 AMWhen selecting two items from selectManyListbox I get the following validation error:
Conversion Error setting value '7 9' for '#{workgroupSelectedStudents}'.
Evidently person with Id 7 and 9 were selected, but what is causing this validation error? I tried overriding equals() and to match objects on their @Id field. This yielded the same result. Can anyone shed some light on this? I am deploying this on Jboss 4.2.0.GA and Seam 2.0.0.GA.
addStudent.xhtml
<s:validateAll> <h:outputLabel for="studentlist" value="Pick students" /> <h:selectManyListbox id="studentlist" size="14" required="true" value="#{workgroupSelectedStudents}"> <s:selectItems value="#{workgroupAvailableStudents}" var="student" label="#{student.firstName} #{student.prefix} #{student.lastName}"/> <s:convertEntity/> </h:selectManyListbox> </s:validateAll>
WorkgroupStudentDetail.java
@Stateful @Name("workgroupStudentManager") @Scope(ScopeType.CONVERSATION) @Conversational public class WorkgroupStudentDetail implements WorkgroupStudentDetailInterface { @In private EntityManager entityManager; @In(required = false) @Out(required = false) private Collection<Person> workgroupAvailableStudents; @Out(required = false, scope = ScopeType.CONVERSATION) private Collection<Person> workgroupSelectedStudents; @Begin (join = true, flushMode = FlushModeType.MANUAL) @Factory("workgroupAvailableStudents") public void findStudents() { try { workgroupAvailableStudents = (Collection<Person>) entityManager.createQuery("SELECT DISTINCT Object(per) FROM Person per").getResultList(); } catch (Exception e) { log.error("Exception occurred in findStudents() [WorkgroupStudentDetail].", e); } } // .. }
Person.java
@Entity @Table(name = "person") public class Person implements Serializable { private static final long serialVersionUID = 7690407363935244693L; private Long personId; private School school; private String firstName; private String prefix; private String lastName; private Gender gender; private Date dateOfBirth; private String placeOfBirth; private String mobile; private String email; private String nationality; private String edexKey; private String pgnoNumber; private Date startDate; private Date endDate; private Boolean active; private Boolean critical; @Override public String toString() { return getPersonId() == null ? null : getPersonId().toString(); } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "person_id") public Long getPersonId() { return personId; } protected void setPersonId(Long personId) { this.personId = personId; } // ..