ListBox & unexpected wrong validation
fabboco Jun 23, 2006 8:44 AMHi,
I am approaching seam just now.
I am trying to read a selected value from a ListBox.
Each time I press the go button I get the message ?Validation Error?.
I don't think to had set any validation check !!!
What's wrong ?
Thanks
Fabrizio
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://jboss.com/products/seam/taglib" prefix="s"%> <html> <head> <title>Test List</title> <f:loadBundle basename="messages" var="msgs" /> </head> <body> <f:view> <h:form> <table border="0"> <tr> <td>B3</td> <td><h:selectOneMenu value="#{B3Manager.b3}" converter="#{B3Manager.converter}"> <f:selectItems value="#{B3Manager.b3List}" /> </h:selectOneMenu></td> </tr> </table> <h:messages /> <h:commandButton type="submit" value="Go" action="#{B3Manager.go}" /> </h:form> </f:view> </body> </html>
@Stateful @Name("B3Manager") @Scope(ScopeType.EVENT) public class B3ManagerBean implements Serializable, B3Manager { @In(create = true) @Out(required = true) private B3 b3; @DataModel private List<B3> b3List; private Map<String, B3> b3Map; @PersistenceContext(type = PersistenceContextType.EXTENDED) private EntityManager em; @Logger private Log log; @Create() public void findAll() { b3List = em.createQuery("from B3 o order by o.id desc").getResultList(); Map<String, B3> results = new TreeMap<String, B3>(); for (B3 localB3 : b3List) { results.put(localB3.getLabel(), localB3); } b3Map = results; b3 = new B3(new Long(0), ""); } public String go() { log.info("Selected #{b3.id}, #{b3.label}"); return "/B3.jsp"; } @Remove @Destroy public void destroy() { ; } public Map<String, B3> getB3List() { System.out.println("getB2List"); System.out.println("Size b3List " + b3List.size()); System.out.println("Size b3Map " + b3Map.size()); System.out.println("b3Map " + b3Map); return b3Map; } public Converter getConverter() { return new B3Converter(b3List); } static public class B3Converter implements Converter, Serializable { List<B3> b3List; public B3Converter(List<B3> b3List) { this.b3List = b3List; } public String getAsString(FacesContext facesContext, UIComponent component, Object obj) { if (obj == null) return null; B3 b3 = (B3) obj; return b3.getId().toString(); } public Object getAsObject(FacesContext facesContext, UIComponent component, String str) throws ConverterException { if (str == null || str.length() == 0) { return null; } Long id = Long.valueOf(str); for (B3 b3 : b3List) { if (b3.getId().longValue() == id.longValue()) { return b3; } } return null; } } public B3 getB3() { return b3; } public void setB3(B3 b3) { this.b3 = b3; } }
@Entity @Name("b3") @Scope(SESSION) @Table(name = "b3") public class B3 implements Serializable { private static final long serialVersionUID = 1881413500711441951L; private Long id; private String label; public B3(Long id, String label) { this.id = id; this.label = label; } public B3() { } @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @NotNull() public String getLabel() { return label; } public void setLabel(String p1) { this.label = p1; } public String toString() { return "B3(" + id + " , " + label + ")"; } public boolean equals(Object other) { if (other == null || !(other instanceof Category)) { return false; } B3 otherB3 = (B3) other; return (getId().longValue() == otherB3.getId().longValue()); } public int hashcode() { return 37 * getId().intValue() + 97; } }