Datatable de uma VIEW Problema An Error Occurred: For input string - JSF + JPA + EJB

8 respostas
denispoa

Pessoal, estou com um problema em uma view para listar os dados de uma Lista.

Meu ManagegBean

@ManagedBean(name = "completeController")
@SessionScoped
public class CompleteInscricao implements Serializable {

    private List quadras = null;

    
    @EJB    
    private geomais.importacao.DAO.ImovelCorrelacaoFacade ejbFacade;
    public class Quadra {

        Integer cdDistrito;
        Integer cdSetor;
        Integer nrQuadra;

        public Integer getNrQuadra() {
            return nrQuadra;
        }

        public void setNrQuadra(Integer nrQuadra) {
            this.nrQuadra = nrQuadra;
        }

        public Integer getCdDistrito() {
            return cdDistrito;
        }

        public void setCdDistrito(Integer cdDistrito) {
            this.cdDistrito = cdDistrito;
        }

        public Integer getCdSetor() {
            return cdSetor;
        }

        public void setCdSetor(Integer cdSetor) {
            this.cdSetor = cdSetor;
        }

        public Quadra() {
        }
    }
    
    public List<Quadra> getQuadras() {
            List consQuadras =  ejbFacade.findQuadras(1, 1);
            quadras = (List<Quadra>) consQuadras;
       
        return quadras;
    }

    public void setQuadras(List quadras) {
        this.quadras = quadras;
    }

    public CompleteInscricao() {
    }
}

Meu Método findQuadras

public List<T> findQuadras(Integer cdDistrito, Integer cdSetor)  {         
        Query query = getEntityManager().createQuery("SELECT distinct i.cdDistrito, i.cdSetor, i.nrQuadra FROM ImovelCorrelacao i WHERE i.cdDistrito = :cdDistrito and i.cdSetor = :cdSetor");
        query.setParameter("cdDistrito",cdDistrito);
        query.setParameter("cdSetor",cdSetor);
        System.out.println("Consulta Parametros: "+ query);
        List<T> result = (List<T>) query.getResultList();        
        if (result != null && !result.isEmpty()) {
            return result;
        } else {
            return null;                
        }
    }
Minha View
<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:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j">

    <head />

    <body>
        <ui:composition template="/template.xhtml">
            <ui:define name="title"> Relatórios de Quadras</ui:define>
            <ui:define name="header">Imprimir Relatórios de Quadras</ui:define>
            <ui:define name="body">
               <h:form>                                        
                   <rich:dataTable var="quad" value="#{completeController.quadras}" style="width:800px">
                            <rich:column>
                                <f:facet name="header"><h:outputText value="Quadra" /></f:facet>
                                <h:outputText value="#{quad.nrQuadra}" />
                            </rich:column>                      
                        </rich:dataTable>
                </h:form>
            </ui:define>
        </ui:composition>
    </body>
</html>
Ocorre o erro: For input string: "nrQuadra"
An Error Occurred: 
For input string: "nrQuadra"
+- Stack Trace
java.lang.NumberFormatException: For input string: "nrQuadra"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:449)
	at java.lang.Integer.parseInt(Integer.java:499)
	at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:375)
	at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:195)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
	at org.richfaces.renderkit.RendererBase.renderChildren(RendererBase.java:278)
	at org.richfaces.renderkit.AbstractTableBaseRenderer.encodeColumn(AbstractTableBaseRenderer.java:90)
	at org.richfaces.renderkit.DataTableRenderer.encodeRow(DataTableRenderer.java:213)
	at org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:89)
	at org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:69)
	at org.richfaces.component.UIDataAdaptor.walk(UIDataAdaptor.java:810)
	at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:99)
	at org.richfaces.renderkit.AbstractRowsRenderer.processRows(AbstractRowsRenderer.java:111)
	at org.richfaces.renderkit.AbstractTableRenderer.encodeTableRows(AbstractTableRenderer.java:146)
	at org.richfaces.renderkit.AbstractTableRenderer.doEncodeChildren(AbstractTableRenderer.java:202)
	at org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:157)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	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 com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
	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:594)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

Detalhes:

1) Já debuguei e vi que a Lista consQuadras é populada;
2) Também a Lista quadras é preenchida;
3) Porém o Tipo do de dado da Lista fica Object[] e não Quadra, mas eu converto a lista na linha 46 do código do ManagedBean;
4) A Classe Quadras eu crio dentro do prório ManagedBEan, mas ja tentei criar fora e não adiantou;
5) Este metodo findQuadras retorna quadras de uma Classe/Entidade de banco de dados chamada ImovelCorrelacao;
6) Quando criei o código da View a EL me trouxe as variáveis da Lista de Quadras constantes na Classe(cdSetor, cdDistrito e nrQuadra);
7) Tenho um outro ManagedBean que utiliza a mesma entidade e funciona, somente este que estou convertendo em outra classe da este erro.

Não sei o que fazer para resolver, pois iniciei a poucos meses nesta área de programação.

Agradeço a ajuda que vier.

8 Respostas

Hebert_Coelho

Seu erro está aqui:

Por algum acaso “i.nrQuadra” está como int na sua classe e String no banco? Ou vice versa?

denispoa

Pior que não, veja só o trecho da Entity, esta uma copia fiel da tabela no banco.

public class ImovelCorrelacao implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @NotNull
    @Column(name = "cd_distrito", nullable = false)
    private int cdDistrito;
    @Basic(optional = false)
    @NotNull
    @Column(name = "cd_setor", nullable = false)
    private int cdSetor;
    @Basic(optional = false)
    @NotNull
    @Column(name = "nr_quadra", nullable = false)
    private int nrQuadra;
    @Basic(optional = false)
    @NotNull
    @Column(name = "nr_lote", nullable = false)
    private int nrLote;
    @Basic(optional = false)
    @NotNull
    @Column(name = "nr_unidade", nullable = false)
    private int nrUnidade;
    @Size(max = 50)
    @Column(name = "inscricao", length = 50)
    private String inscricao;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "nr_cadastro_imobiliario", nullable = false)
    private Integer nrCadastroImobiliario;

Acho que o meu problema esta que não converte meu List consQuadras para um List, quando debugo a List aparece do tipo Object[] e não Quadra.

A Não ser que minha List retorne uma String, mas não deveria.

Abaixo a imagem do Debug mostrando o que tem no consQuadra

[img]https://lh4.googleusercontent.com/-wFgXRqmNrN4/Ts6uKQMWO3I/AAAAAAAAAXU/xY4ulY1p61s/s1354/Debug2.png[/img]

... e abaixo mostrando que populou q Quadra, mas o tipo do objeto não é QUADRA como deveria.

[img]https://lh6.googleusercontent.com/-eGU_I2kn5IQ/Ts6uKUemPRI/AAAAAAAAAXQ/FdzSd0nCyFo/w1378-h609-k/Debug.png[/img]

Hebert_Coelho

Vc consegue parar nesse return?if (result != null && !result.isEmpty()) { return result Ele popula toda a lista com sucesso?

Só estou perguntando pq vc mostrou o debug de um resultado.

Como essa coluna está mapeada no banco?

denispoa

Esta populando, mas tbm traz o tipo Object[]; com os elementos preenchidos;

Hebert_Coelho

faz um select ae

select distinct nquadra from tabela

veja c só vai trazer números.

Veja c vai voltar também algum valor null.

denispoa

Abaixo o SQL, ta retornando int

Hebert_Coelho

É cara, ta macabro isso aí.

Faz um teste aí então.

No seu método que lista todo mundo, coloca um CAST (em sql server é assim. qual seu banco mesmo?) para number.

seria tipo

SELECT …, CAST(nQuadra AS NUMERIC) from xxxxxx…

Essa seria a sintax para SQL Server. Veja qual a sintax para seu banco.

MandicaBrito

Olá,

Sei que tem tempo, mas para não criar outro tópico, alguém conseguiu encontrar a solução para esse problema?
Estou tendo um parecido, ao tentar acessar os dados de um dos registros do dataTable. Ele carrega a tabela, mas se eu selecionar um registro para ver maiores detalhes ele me mostra a exceção de NumberFormatException para um dos campos.

O curioso é que já usei esse mesmo dataTable em outra tela do sistema e funciona normalmente. E sei que ele é uma string no banco e na aplicação.

Estou usando JSF 2 e primefaces 3.2. O dataTable é do Primefaces.

Agradeço ajuda.

Criado 24 de novembro de 2011
Ultima resposta 27 de dez. de 2012
Respostas 8
Participantes 3