Boa tarde a todos;
Estou tentando a dias fazer os combos cidades estados funcionar mas ainda não consegui, o que acontece é o seguinte: o meu converter não funciona na hora de pegar a cidade para gravar, o estado vai blz. Já olhei inúmeros tópicos e ainda não consigo. Alguém poderia me da um ajuda neste problema?
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: javax.servlet.ServletException: For input string: "Agua Branca do Amapari"
br.com.Ipbc.web.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:33)
root cause
javax.servlet.ServletException: For input string: "Agua Branca do Amapari"
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
br.com.Ipbc.web.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:21)
root cause
java.lang.NumberFormatException: For input string: "Agua Branca do Amapari"
java.lang.NumberFormatException.forInputString(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
br.com.Ipbc.Converter.ConverteCidade.getAsObject(ConverteCidade.java:20)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:171)
com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:201)
com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:318)
org.primefaces.component.selectonemenu.SelectOneMenuRenderer.getConvertedValue(SelectOneMenuRenderer.java:55)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
javax.faces.component.UIInput.validate(UIInput.java:960)
javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
javax.faces.component.UIInput.processValidators(UIInput.java:698)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIForm.processValidators(UIForm.java:253)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1169)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
br.com.Ipbc.web.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:21)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs.
Minha tela…
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:stella="http://stella.caelum.com.br/faces2">
<f:view>
<h:head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1" />
<title>Cadastro de Funcionários</title>
<link type="text/css" rel="stylesheet" href="resources/css/estilo.css" />
<script type="text/javascript" src="PrimeFacesLocales.js"></script>
<link rel="shortcut icon" href="resources/Imagens/favicon.ico"
type="resources/Imagens/ico" />
</h:head>
<h:body styleClass="corpo">
<center>
<h:graphicImage library="Imagens" style="border:0"
name="funcionario.png" width="100" height="100" />
<h1>Cadastro de Funcionários</h1>
</center>
<h:form id="formCadastroFuncionario">
<center>
<p:messages/>
<p:focus context="panel" />
<p:panelGrid columns="6" cellpadding="10" id="panel">
<f:facet name="header">* Campos obrigatórios</f:facet>
<f:facet name="footer">Escolha uma Opção</f:facet>
<h:outputLabel value="Nome:" for="nome" />
<p:inputText id="nome" label="Nome"
value="#{funcionarioBean.funcionario.nome}" maxlength="45"
size="45"
validatorMessage="O nome deve conter entre 7 e 45 caracteres."
requiredMessage="Por favor, digite seu nome."
style="text-transform:uppercase">
<f:validateLength minimum="7" maximum="50" />
</p:inputText>
<h:outputLabel value="Endereco:" for="endereco" />
<p:inputText id="endereco" label="Endereco"
value="#{funcionarioBean.funcionario.endereco}" maxlength="45"
size="45"
validatorMessage="O endereço deve conter entre 7 e 45 caracteres."
requiredMessage="Por favor, digite seu endereço."
style="text-transform:uppercase">
<f:validateLength minimum="7" maximum="50" />
</p:inputText>
<h:outputLabel value="Bairro:" for="bairro" />
<p:inputText id="bairro" label="Bairro"
value="#{funcionarioBean.funcionario.bairro}" maxlength="45"
size="45"
validatorMessage="O bairro deve conter entre 3 e 45 caracteres."
requiredMessage="Por favor, digite seu bairro."
style="text-transform:uppercase">
<f:validateLength minimum="7" maximum="50" />
</p:inputText>
<h:outputLabel value="Estado:" for="estado" />
<p:selectOneMenu id="estado" value="#{funcionarioBean.funcionario.uf}" style="width:290px">
<f:selectItem itemLabel="Selecione um estado" />
<f:selectItems value="#{estadosCidadesBean.estados}" var="estado"
itemValue="#{estado.uf}" itemLabel="#{estado.uf}" />
<p:ajax update="cidade" event="change"
listener="#{funcionarioBean.listaCidades}" />
</p:selectOneMenu>
<h:outputLabel value="Cidade:" for="cidade" />
<p:selectOneMenu id="cidade" converter="converteCidade"
value="#{funcionarioBean.funcionario.municipio}"
style="width:290px">
<f:selectItem itemLabel="Selecione uma cidade"/>
<f:selectItems value="#{funcionarioBean.cidades}" var="cidade"
itemValue="#{cidade.nome}" itemLabel="#{cidade.nome}" />
</p:selectOneMenu>
<h:outputText value="CEP: "/>
<p:inputMask value="#{funcionarioBean.funcionario.cep}" mask="99.999-999" size="45" />
<h:outputText value="Telefone:" />
<p:inputMask value="#{funcionarioBean.funcionario.telefone}"
mask="(99) 9999-9999" maxlength="45" size="45" />
<h:outputText value="Celular:" />
<p:inputMask value="#{funcionarioBean.funcionario.telefone_2}"
mask="(99) 9999-9999" maxlength="45" size="45" />
<h:outputLabel value="Contato:" for="contado" />
<p:inputText id="contato" label="Contato"
value="#{funcionarioBean.funcionario.contato}" maxlength="45"
size="45"
validatorMessage="O contato deve conter entre 3 e 45 caracteres."
requiredMessage="Por favor, digite seu contato."
style="text-transform:uppercase">
<f:validateLength minimum="7" maximum="50" />
</p:inputText>
<h:outputText value="Data Cad.:" />
<p:calendar value="#{funcionarioBean.funcionario.dataCadastro}"
size="45" />
<h:outputText value="Data Adm.:" />
<p:calendar value="#{funcionarioBean.funcionario.dataAdmicao}"
size="45" />
<h:outputLabel value="Cargo:" for="cargo" />
<p:selectOneMenu id="cargo"
value="#{funcionarioBean.funcionario.cargo}" style="width:290px">
<f:selectItem itemLabel="Selecione um cargo" />
<f:selectItems value="#{cargoBean.lista_Todos}" var="cargo"
itemValue="#{cargo.descricao}" itemLabel="#{cargo.descricao}" />
</p:selectOneMenu>
<h:outputText value="Setor: " />
<p:inputText value="#{funcionarioBean.funcionario.setor}" size="45" />
<h:outputText value="Data Nasc.:" />
<p:calendar value="#{funcionarioBean.funcionario.dataAdmicao}"
size="45" />
<h:outputText value="RG: " />
<p:inputText value="#{funcionarioBean.funcionario.rg}" size="45" />
<h:outputLabel value="cpf:" for="cpf" />
<p:inputMask id="cpf" value="#{funcionarioBean.funcionario.cpf}"
mask="999.999.999-99" size="45" requiredMessage="Informe o CPF!!!">
<f:validator validatorId="CPFValidator"/>
<!-- <stella:validateCPF formatted="true"/> Com esta linha realizamos a validação -->
</p:inputMask>
<h:outputLabel value="Est. Civil:" for="estadoCivil" />
<p:selectOneMenu id="estadoCivil"
value="#{funcionarioBean.funcionario.estadoCivil}"
style="width:290px">
<f:selectItem itemLabel="Selecione uma opção" />
<f:selectItem itemValue="casado" itemLabel="Casado" />
<f:selectItem itemValue="solteiro" itemLabel="Solteiro" />
<f:selectItem itemValue="viuvo" itemLabel="Viuvo" />
<f:selectItem itemValue="divorciado" itemLabel="Divorciado" />
<f:selectItem itemValue="outros" itemLabel="Outros" />
</p:selectOneMenu>
<h:outputLabel value="Sangue:" for="sangue" />
<p:selectOneMenu id="sangue"
value="#{funcionarioBean.funcionario.tipoSangue}" style="width:290px">
<f:selectItem itemLabel="Selecione um tipo de sangue" />
<f:selectItem itemValue="A+" itemLabel="A+" />
<f:selectItem itemValue="A-" itemLabel="A-" />
<f:selectItem itemValue="AB+" itemLabel="AB+" />
<f:selectItem itemValue="AB-" itemLabel="AB-" />
<f:selectItem itemValue="B+" itemLabel="B+" />
<f:selectItem itemValue="B-" itemLabel="B-" />
<f:selectItem itemValue="O+" itemLabel="O+" />
<f:selectItem itemValue="O-" itemLabel="O-" />
</p:selectOneMenu>
<h:outputLabel value="Salário:" for="salario" />
<p:inputText value="#{funcionarioBean.funcionario.salario}" size="45" />
<h:outputText value="CTPS:" />
<p:inputText value="#{funcionarioBean.funcionario.cartTrabalho}" size="45" />
<h:outputLabel value="E-mail:" for="email" />
<p:inputText id="email" label="E-mail"
value="#{funcionarioBean.funcionario.email}" maxlength="45" size="45"
validatorMessage="E-mail invalido."
requiredMessage="Por favor digite seu E-mail"
style="text-transform:uppercase">
<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />
</p:inputText>
</p:panelGrid>
<p:dock position="top">
<p:menuitem value="Gravar" icon="resources/Imagens/user_into.png"
action="#{funcionarioBean.gravar}" ajax="false" />
<p:menuitem value="Pesquizar"
icon="resources/Imagens/pesquizar.png" url="listagem_funcionarios.jsf" />
<p:menuitem value="Sair" icon="resources/Imagens/sair_2.png"
url="tela_Principal.jsf" />
</p:dock>
</center>
</h:form>
</h:body>
</f:view>
</html>
Meu converter
package br.com.Ipbc.Converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import br.com.Ipbc.DAO.CidadeEstadoDAO;
import br.com.Ipbc.Modelo.Cidades;
@FacesConverter(value = "converteCidade", forClass = Cidades.class)
public class ConverteCidade implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException{
if (value != null && !value.equals("")) {
CidadeEstadoDAO cidadeEstadoDAO = new CidadeEstadoDAO();
return cidadeEstadoDAO.getByIdCidade(Integer.parseInt(value));
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException{
if (value != null && value instanceof Cidades) {
return ((Cidades)value).getId().toString();
}
return null;
}
}
Meu DAO
package br.com.Ipbc.DAO;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import br.com.Ipbc.Modelo.Cidades;
import br.com.Ipbc.Modelo.Estados;
public class CidadeEstadoDAO implements InterfaceCidadeEstadoDAO {
private Session session;
public void setSession(Session s) {
session = s;
}
@Override
public Estados getByIdEstado(Long id) {
return (Estados) session.get(Estados.class, id);
}
@SuppressWarnings("unchecked")
@Override
public List<Estados> consultaTodosEstados() {
Criteria crit = session.createCriteria(Estados.class);
return crit.list();
}
@SuppressWarnings("unchecked")
@Override
public List<Cidades> consultaCidades(Estados estado) {
try {
String sql = "select c From Cidades c where c.uf = '"
+ estado.getUf() + "'";
Query query = session.createQuery(sql);
List<Cidades> cidades = query.list();
return cidades;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public Cidades getByIdCidade(Integer id) {
return (Cidades) session.get(Cidades.class, id);
}
}