Oi pessoal,
estou tendo problemas para preencher uma combobox no JSF. A página
aparece toda certinha. O problema é q dá "Validation Error: Value is not
valid" qdo mando enviar a página. Estou há vários dias quebrando a
cabeça e procurando na net, mas não encontro uma solução para o
problema. Vou enviar o código para quem puder me ajudar.
Mapeamentos no faces-config.xml:
<managed-bean>
<managed-bean-name>pc_CadastroAluno</managed-bean-name>
<managed-bean-class>pagecode.admin.aluno.Cadastro</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<converter>
<converter-id>serieConverter</converter-id>
<converter-class>pagecode.converter.SerieConverter</converter-class>
</converter>
Código na página:
<h:selectOneMenu styleClass="selectOneMenu" id="cmbSerie"
value="#{pc_CadastroAluno.serie}" converter="serieConverter">
<f:selectItems value="#{pc_CadastroAluno.series}" />
</h:selectOneMenu>
<h:message for="cmbSerie" />
pagecode.admin.aluno.Cadastro.java:
public class Cadastro extends PageCodeBase implements Formulario
{
private SerieVO serieVO;
public SerieVO getSerie()
{
return serieVO;
}
/**
* Seta a série a ser exibida na combobox.
* @param serie
*/
public void setSerie(SerieVO serie)
{
this.serieVO = serie;
}
/**
* Retorna uma Collection de SelectItem contendo todas as séries a
serem exibidas na combobox.
* @return
*/
public Collection getSeries()
{
Collection items = new ArrayList();
Map series = (Map) getSessionScope().get("series");
if (series == null)
{
DAOFactory fac = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE);
try
{
series = fac.getSerieDAO().getSeries();
getSessionScope().put("series", series);
}
catch (Exception e)
{
e.printStackTrace();
throw new FacesException(e);
}
}
Iterator it = series.values().iterator();
while (it.hasNext())
{
SerieVO s = (SerieVO) it.next();
SelectItem si = new SelectItem(s.getCodigo(), s.getNome());
items.add(si);
}
return items;
}
public String envia()
{
return SUCESSO;
}
}
public class SerieConverter implements Converter
{
public String getAsString(FacesContext fc, UIComponent ui, Object obj)
{
Integer i = (Integer) obj;
return String.valueOf(i.intValue());
}
public Object getAsObject(FacesContext fc, UIComponent ui, String valor)
{
SerieVO serie = null;
Map session = fc.getExternalContext().getSessionMap();
Map series = (Map) session.get("series");
if (series != null)
return (SerieVO) series.get(new Integer(valor));
else
return getSerie(new Integer(valor));
}
private SerieVO getSerie(Integer codigo)
{
DAOFactory fac = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE);
try
{
return fac.getSerieDAO().getSerie(codigo);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
SerieVO.java
public class SerieVO implements Serializable
{
private Integer codigo;
private String nome;
private Map alunos = null;
public SerieVO()
{
this.alunos = new TreeMap();
}
public Integer getCodigo()
{
return codigo;
}
public void setCodigo(Integer codigo)
{
this.codigo = codigo;
}
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public Map getAlunos()
{
return alunos;
}
public void setAlunos(Map alunos)
{
this.alunos = alunos;
}
public void setAluno(AlunoVO aluno)
{
this.alunos.put(aluno.getCodigo(), aluno);
}
public boolean equals(Object obj)
{
if (obj == this)
return true;
if (!(obj instanceof SerieVO))
return false;
SerieVO sVO = (SerieVO) obj;
if (sVO.getCodigo() == null || sVO.getNome() == null)
return false;
return this.getCodigo().equals(sVO.codigo)
&& this.getNome().equals(sVO.getNome());
}
public int hashCode()
{
return codigo.hashCode();
}
}
_______________________________________________________
Yahoo! Acesso Grátis - Internet rápida e grátis.
Instale o discador agora! http://br.acesso.yahoo.com/
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/jug-petropolis/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/