Boa tarde galera, tudo certo?
Estou comecando agora com JavaWeb e estou usnado JSF2 + PrimeFaces + Hibernate e estou com este erro quando vou persistir a informacao do SelectOneMenu no banco, ele me retorna um erro apenas no navegador “Erro de validação: o valor não é válido” e nao me mostra nada no eclipse de erro…ja entrei em varios topicos e foruns porem nao consegui selecionar ainda, preciso dar andamento no meu TCC…quem puder ajudar agradeco, vou postar aqui minhas classes…
valew
Beans Estado e Cidade:
[code]@Entity
public class Estado implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer codigo;
private String nome;
private String sigla;
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 String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
}
@Entity
@Table(name=“Cidade”)
public class Cidade implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer codigo;
private String nome;
@ManyToOne
@JoinColumn(name="codcid")
private Estado estado;
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 Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
}
[/code]
MB:
@ManagedBean
@RequestScoped
public class CidadeMB{
private Cidade c = new Cidade();
private List<Cidade> listaCidade = new ArrayList<Cidade>();
private List<Estado> listaEstado = new ArrayList<Estado>();
private List<SelectItem> ListarPaisesCombo = new ArrayList<SelectItem>();
private DataTable dttable;
public String cadastrar(){
new CidadeDAO().Salvar(c);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cidade cadastrada com sucesso!",""));
return "";
}
public void remover(ActionEvent act){
new CidadeDAO().excluir(listaCidade.get(dttable.getRowIndex()));
}
public Cidade getC() {
return c;
}
public void setC(Cidade c) {
this.c = c;
}
public List<Cidade> getListaCidade() {
listaCidade = new CidadeDAO().listar();
return listaCidade;
}
public void setListaCidade(List<Cidade> listaCidade) {
this.listaCidade = listaCidade;
}
public DataTable getDttable() {
return dttable;
}
public void setDttable(DataTable dttable) {
this.dttable = dttable;
}
public List<Estado> getListaEstado() {
listaEstado = new EstadoDAO().listar();
return listaEstado;
}
public void setListaEstado(List<Estado> listaEstado) {
this.listaEstado = listaEstado;
}
public List<SelectItem> getListarPaisesCombo() {
List<Estado> lista = new EstadoDAO().listar();
EstadoDAO pd = new EstadoDAO();
for (int i = 1; i <= lista.size(); i++) {
SelectItem item = new SelectItem();
item.setLabel(lista.get(i - 1).getNome());
item.setValue(pd.findById(lista.get(i - 1).getCodigo()));
ListarPaisesCombo.add(item);
}
return ListarPaisesCombo;
}
public void setListarPaisesCombo(List<SelectItem> listarPaisesCombo) {
ListarPaisesCombo = listarPaisesCombo;
}
}
xhtml:
<h:head></h:head>
<body>
<h:form id="form">
<p:panel id="painel" header="Cadastro de Cidade">
<p:messages id="msgs" autoUpdate="true" closable="true"/>
<p:panelGrid columns="2">
<h:outputText value="Nome: " />
<p:inputText id="nome" value="#{cidadeMB.c.nome}" required="true" onfocus="this.value='';"/>
<p:outputLabel for="estado" value="Estado: "/>
<p:selectOneMenu id="estado" value="#{cidadeMB.c.estado}" converter="ConverterEstado">
<f:selectItem itemLabel="Selecione o Estado" itemValue="0"/>
<f:selectItems value="#{cidadeMB.listarPaisesCombo}" />
</p:selectOneMenu>
</p:panelGrid>
<p/>
<p:commandButton value="Cadastrar" actionListener="#{cidadeMB.cadastrar}"/>
</p:panel>
</h:form>
</body>
</html>
Converter:
@FacesConverter(value = "ConverterEstado")
public class ConverterEstado implements Converter{
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
try {
if (value != null && !value.equals("")) {
EstadoDAO est = new EstadoDAO();
return est.findById(Integer.parseInt(value));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
if (value instanceof Estado) {
Estado est = (Estado) value;
return String.valueOf(est.getCodigo());
}
return "";
}
}