Estou tentando implementar um converter para um objeto, mas está dando esse erro:
[quote]
java.lang.NumberFormatException: For input string: “”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at sgm.util.CategoriaConverter.getAsObject(CategoriaConverter.java:18)
at com.sun.faces.renderkit.html_basic.MenuRenderer.isSelected(MenuRenderer.java:719)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:551)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:792)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:844)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:298)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
at org.primefaces.component.fieldset.FieldsetRenderer.encodeContent(FieldsetRenderer.java:95)
at org.primefaces.component.fieldset.FieldsetRenderer.encodeMarkup(FieldsetRenderer.java:76)
at org.primefaces.component.fieldset.FieldsetRenderer.encodeEnd(FieldsetRenderer.java:53)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)[/quote]
Não sei onde estou errando, estou há dias tentando salvar no BD o id de um objeto vindo do selectOneMenu, mas não consigo.
Já tinha feito o q vc falou hugo.hlcxcx.
Mas continuo não conseguindo salvar no BD, já tentei fazer sem usar o converter, pegando o id direto, também não foi.
ERRO:
Pessoal, consegui resolver sem o converter. Peguei o id do objeto selecionado, carreguei o objeto com esse id e setei antes de salvar. Isso é certo? Posso fazer assim? Por que tenho ou não que usar o converter?
Já olhei seu exemplo, várias vezes, valeu pela ajuda. Mas não consigo de jeito nenhum colocar nenhum converter para funcionar, já estou há dias nisso, já estou ficando p… com isso. Consegui sem utilizar converter e queria saber se posso fazer assim? Usar ou não usar o converter? Li na internet que é bom usar, mas não estou conseguindo.
Vou tentar mais uma vez, vou ler seu exemplo de novo e retorno aqui.
Valeu pela ajuda de vocês.
<h:selectOneMenu value="#{vendaBean.formaPagamento}" required="true" requiredMessage="Selecione a Forma de Pagamento" >
<c:forEach items="#{globalRequest.formaPagamentoList}" var="formaPagamento">
<c:if test="#{formaPagamento.ativo}">
<f:selectItem itemLabel="#{formaPagamento.descricao}" itemValue="#{formaPagamento}" />
</c:if>
</c:forEach>
<f:converter converterId="formapagamento" />
</h:selectOneMenu>
Eu não mexi de novo no código mas eu acho que se você nao usar o required=true no seu h:selectOneMenu você precisa verificar no converter se a string passada é vazia que é o motivo dessa exceção que você está recebendo
Só pra constar eu fazia desse jeito que você fez e não tem problema nenhum, mas usando o converter o seu código fica mais limpo.
Se tiver tempo testa esse código ai que eu te passei
Lucas, testei o código que você passou e voltei ao mesmo erro de quando eu postei essa dúvida:
Para preencher seu comboBox (selectOneMenu), você retorna uma lista de objetos normais ou uma lista de SelectItens do JSF?
Meu xhtml ficou assim:
<h:outputLabel value="Categoria:" for="categoria"/>
<h:selectOneMenu value="#{produtoController.produto.categoria}" id="categoria"
required="true" requiredMessage="Por favor, selecione uma categoria par ao produto!">
<f:selectItem itemLabel="Selecione..." itemValue="" noSelectionOption="true" />
<f:selectItems itemValue="#{categoriaController.listaCategorias}"/>
<f:converter converterId="categoriaConverter"/>
</h:selectOneMenu>
Minha lista é preenchida assim:
CONTROLLER
private ArrayList<SelectItem> getListaCategoriasAtivas() {
ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
List<Categoria> resultado = (List<Categoria>) this.categoriaDao.listarAtivas();
for (Categoria c : resultado) {
SelectItem item = new SelectItem(c.getId(), c.getDescricao());
lista.add(item);
}
return lista;
}
DAO:
@Override
public List<Categoria> listarAtivas() {
Transaction tx = null;
Session session = HibernateUtil.openSession();
tx = session.beginTransaction();
session.clear();
Criteria c = session.createCriteria(Categoria.class);
//Restrigindo apenas as linhas salvas que estejama ativas, ou seja, com o campo ativo com 1(true)
c.add(Restrictions.eq("ativo", true));
c.addOrder(Order.asc("descricao"));
List lista = c.list();
tx.commit();
return lista;
}
Meu converter fiz igual ao que me passou:
[code]@FacesConverter(value = “categoriaConverter”)
public class CategoriaConverter implements Converter {