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;
}
}