Pessoal,
Estou tentando implementar um converter para um objeto, mas está dando esse erro:
<blockquote>
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)</blockquote>
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.
FORM:
<h:form>
<p:fieldset legend="Cadastro de Produto" styleClass="cadastros">
<p:focus for="descricao"/>
<h:panelGrid columns="2" id="tabela">
<h:outputLabel value="Descrição:" for="descricao"/>
<h:inputTextarea value="#{produtoController.produto.descricao}" id="descricao"
cols="60" rows="2" required="true"/>
<h:messages showDetail="#{true}" showSummary="#{true}" />
<h:outputLabel value="Categoria:" for="categoria"/>
<h:selectOneMenu id="categoria"
value="#{produtoController.produto.categoria}" converter="categoriaConverter">
<f:selectItem itemLabel="Selecione..." itemValue="" noSelectionOption="true" />
<f:selectItems value="#{categoriaController.listaCategorias}" var="categorias"
itemLabel="#{categorias.descricao}" itemValue="#{categorias.id}"/>
</h:selectOneMenu>
<h:outputLabel value="Estoque Mínimo:" for="estoqueMin"/>
<h:inputText value="#{produtoController.produto.estoqueMin}" id="estoqueMinimo" size="4" required="true"/>
<h:outputLabel value="Estoque Máximo:" for="estoqueMax"/>
<h:inputText value="#{produtoController.produto.estoqueMax}" id="estoqueMaximo" size="4" required="true"/>
<h:outputLabel value="Valor Unitário:" for="valor"/>
<h:inputText value="#{produtoController.produto.valor}" id="valor" size="10" required="true"/>
<h:outputLabel value="Localização:" for="localizacao"/>
<h:inputTextarea value="#{produtoController.produto.localizacao}" id="localizacao"
cols="60" rows="2" required="true"/>
<h:outputLabel value="Perecível:" for="perecivel"/>
<h:selectOneMenu value="#{produtoController.produto.perecivel}" id="perecivel" required="true">
<f:selectItem itemValue="true" itemLabel="Sim"/>
<f:selectItem itemValue="false" itemLabel="Não"/>
</h:selectOneMenu>
<h:outputLabel value="Ativo:" for="ativo"/>
<h:selectOneMenu value="#{produtoController.produto.ativo}" id="ativo" required="true">
<f:selectItem itemValue="true" itemLabel="Sim"/>
<f:selectItem itemValue="false" itemLabel="Não"/>
</h:selectOneMenu>
<h:outputLabel value="Observações:" for="obs"/>
<h:inputTextarea value="#{produtoController.produto.obs}" id="obs"
cols="60" rows="2" required="true"/>
</h:panelGrid>
<h:commandButton action="#{produtoController.salvar}" value="Salvar"/>
<h:commandButton action="#" value="Excluir" />
</p:fieldset>
</h:form>
CONVERTER:
@FacesConverter(value = "categoriaConverter", forClass = Categoria.class)
public class CategoriaConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
CategoriaDao categoriaDao = new CategoriaDaoImp();
return categoriaDao.getCategoria(Integer.parseInt(value));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
}