JSF+JPA+PrimeFaces (Erro java.lang.NumberFormatException: For input string: " x ") (Resolvido)

Boa noite galera, sou novo nisso e estou montando uma aplicação usando JSF + JPA +PrimeFaces
só que estou com um problema, se não há nenhum dado no banco, a aplicação funciona.
Se eu adiciono algum dado ele da erro e não carrega.
Alguem poderia me dar uma luz? hehe
O que da a entender é que ele pede uma “String” no meu campos registro não é?
Só que meu campo registro é um tipo “long”

segue o erro e no final o erro completo

java.lang.NumberFormatException: For input string: "registro"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

Classe Livro

package Model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.envers.Audited;


@Entity
//@Audited
public class Livro implements Serializable {

    @Id
    @GeneratedValue
    //@GeneratedValue(strategy = GenerationType.IDENTITY)
    private long registro;
    private float processo;
    private int ra;
    private String nomeAluno;
    private String situacao;
    private String situacaoAntiga;

    public Livro(long registro,float processo,int ra,String nomeAluno,String situacao,String situacaoAntiga) {
    }

    public Livro() {
        this.registro = registro;
        this.processo = processo;
        this.ra = ra;
        this.nomeAluno = nomeAluno;
        this.situacao = situacao;
        this.situacaoAntiga = situacaoAntiga;
        
    }

    public String getNomeAluno() {
        return nomeAluno;
    }

    public void setNomeAluno(String nomeAluno) {
        this.nomeAluno = nomeAluno;
    }

    public float getProcesso() {
        return processo;
    }

    public void setProcesso(float processo) {
        this.processo = processo;
    }

    public int getRa() {
        return ra;
    }

    public void setRa(int ra) {
        this.ra = ra;
    }

    public long getRegistro() {
        return registro;
    }

    public void setRegistro(long registro) {
        this.registro = registro;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }
 
     public String getSituacaoAntiga() {
        return situacaoAntiga;
    }

    public void setSituacaoAntiga(String situacaoAntiga) {
        this.situacaoAntiga = situacaoAntiga;
    }
 
}

Classe Dao

package Dao;

import Model.Livro;
import java.util.List;

public interface LivroDao {

    public void save(Livro livro);
    public Livro getLivro(long registro);
    public List<Livro> list();
    public void remove(Livro livro);
    public void update(Livro livro);

}

Classe LivroDaoImp

package Dao;

import Model.Livro;
import Utils.HibernateUtil;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class LivroDaoImp extends HibernateUtil implements LivroDao {

    public void save(Livro livro) {
        EntityManager em = getEntityManager();
       
            em.getTransaction();
            em.persist(livro);
            em.getTransaction().begin();
            em.getTransaction().commit();
            em.close();
      
    }

    public Livro getLivro(long registro) {
        EntityManager em = getEntityManager();
        return em.find(Livro.class, registro);

    }

    public List<Livro> list() {
        EntityManager em = getEntityManager();
        try {
           Query q = em.createNativeQuery("select *from livro");
            //Query q = em.createQuery("select livro0_.registro as registro0_, livro0_.nomeAluno as nomeAluno0_, livro0_.processo as processo0_, livro0_.ra as ra0_, livro0_.situacao as situacao0_, livro0_.situacaoAntiga as situacao6_0_ from Livro livro0_");
            return q.getResultList();
        } finally {
            em.close();
        }
        

    }

    public void remove(Livro livro) {
          EntityManager em = getEntityManager();
       em.getTransaction();
       em.remove(em.getReference(Livro.class, livro.getRegistro()));
       em.getTransaction().begin();
       em.getTransaction().commit();
       em.close();
        
    }

    public void update(Livro livro) {
        EntityManager em = getEntityManager();
        em.getTransaction();
        em.merge(livro);
        em.getTransaction().begin();
        em.getTransaction().commit();
        em.close();
         }
}

HibernaUtil


package Utils;


import Model.Livro;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class HibernateUtil {

    private EntityManagerFactory emf;
    
    public EntityManager getEntityManager(){
        return emf.createEntityManager();
    }
    public HibernateUtil(){
        emf = Persistence.createEntityManagerFactory("academico");
    }
    
}

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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">
    <h:head>
        <title>Sistema Academico</title>
        <link type="text/css" rel="stylesheet" href="dot-luv/skin.css"/>
    </h:head>
    <h:body>
        
        <p:layout fullPage="true">
            <p:layoutUnit position="left" width="200" header="Atividades" resizable="true" closable="true" collapsible="true">
                <h:form prependId="false">
                    <p:commandLink value="Novo Registro" actionListener="#{livroController.prepararAdicionarLivro}" update="infosLivro" oncomplete="dialogGerLivro.show()"/>
                </h:form>
            </p:layoutUnit>
            <p:layoutUnit position="center">
                <h1>Sistema Academico</h1>
                <br/>
                <h:form prependId="false">
                    <p:dataTable id="tabela" var="livro" value="#{livroController.listarLivros}">
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Registro"/>
                            </f:facet>
                            <h:outputText value="#{livro.registro}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Processo"/>
                            </f:facet>
                            <h:outputText value="#{livro.processo}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="RA"/>
                            </f:facet>
                            <h:outputText value="#{livro.ra}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Nome do Aluno"/>
                            </f:facet>
                            <h:outputText value="#{livro.nomeAluno}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Situacao"/>
                            </f:facet>
                            <h:outputText value="#{livro.situacao}"/>
                        </p:column>
                       
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Alterar"/>
                            </f:facet>
                            <p:commandButton actionListener="#{livroController.prepararAlterarLivro}" value="Alterar" update="infosLivro" oncomplete="dialogGerLivro.show()"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Excluir"/>
                            </f:facet>
                            <h:commandLink action="#{livroController.excluirLivro}" value="Excluir"/>
                        </p:column>
                    </p:dataTable>
                </h:form>
            </p:layoutUnit>
        </p:layout>

        <p:dialog header="Sistema Academico" widgetVar="dialogGerLivro"  resizable="false" modal="true" showEffect="slide" width="500">
            <h:form prependId="false">
                <h:panelGrid id="infosLivro" columns="2" style="margin-bottom:10px">

                    <h:outputLabel for="registro" value="Registro" />
                    <h:inputText id="registro" value="#{livroController.livro.registro}"/>

                    <h:outputLabel for="autor" value="Processo" />
                    <h:inputText id="autor" value="#{livroController.livro.processo}"/>

                    <h:outputLabel for="paginas" value="ra" />
                    <h:inputText id="paginas" value="#{livroController.livro.ra}"/>

                    <h:outputLabel for="editora" value="nomeAluno" />
                    <h:inputText id="editora" value="#{livroController.livro.nomeAluno}"/>

                   

                    <h:outputLabel for="situacao" value="Situacao" />
                    <h:selectOneMenu id="situacao" value="#{livroController.livro.situacao}">
                        <f:selectItem itemLabel="concluido" itemValue="concluido"/>
                        <f:selectItem itemLabel="pendente" itemValue="pendente"/>
                        <f:selectItem itemLabel="3" itemValue="3"/>
                        <f:selectItem itemLabel="4" itemValue="4"/>
                        <f:selectItem itemLabel="5" itemValue="5"/>
                    </h:selectOneMenu>

                    <p:commandButton update="tabela" oncomplete="dialogGerLivro.hide();" actionListener="#{livroController.adicionarLivro}" value="Inserir registro"/>
                    <p:commandButton update="tabela" oncomplete="dialogGerLivro.hide();" actionListener="#{livroController.alterarLivro}" value="Alterar registro"/>

                </h:panelGrid>
            </h:form>
        </p:dialog>

    </h:body>
</html>

erro

java.lang.NumberFormatException: For input string: "registro"
	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.coerce(ArrayELResolver.java:166)
	at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularCell(DataTableRenderer.java:571)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:531)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:472)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:201)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:180)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:85)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
	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:313)
	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$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Boa noite, poderia postar o codigo do seu LivroController?

Pelo visto você colocou uma String em um campo numérico.

Olha a mensagem de erro: java.lang.NumberFormatException: For input string: “registro”

boa noite,

A pergunta é apenas para desencargo, hehehehe
Os tipos no banco está igual ao da aplicação, pq ao que parece ele ta esperando uma string e tá recebendo um tipo long.

ab[]s

Então o banco está sendo criado pelo hibernate seguindo as anotações da classe Livro.

Segue a classe Controller



package Controller;

import Dao.LivroDao;
import Dao.LivroDaoImp;
import Model.Livro;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;


@ManagedBean
@SessionScoped
public class LivroController {

    private Livro livro;
    private DataModel listaLivros;

    public DataModel getListarLivros() {
        List<Livro> lista = new LivroDaoImp().list();
        listaLivros = new ListDataModel(lista);
        return listaLivros;
    }

    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }

    public void prepararAdicionarLivro(ActionEvent actionEvent){
        livro = new Livro();
    }

    public void prepararAlterarLivro(ActionEvent actionEvent){
        livro = (Livro)(listaLivros.getRowData());
    }

    public String excluirLivro(){

        Livro livroTemp = (Livro)(listaLivros.getRowData());
        LivroDao dao = new LivroDaoImp();
        dao.remove(livroTemp);
        return "index";

    }

    public void adicionarLivro(ActionEvent actionEvent){

        LivroDao dao = new LivroDaoImp();
        dao.save(livro);
        
    }

    public void alterarLivro(ActionEvent actionEvent){

        LivroDao dao = new LivroDaoImp();
        dao.update(livro);

    }

}

Ninguém? =s

bem estranho, nao ha nenhuma classe sua na stacktrace. poderia ate ser um bug no primefaces, que versao voce esta utilizando? experimente o upgrade.

e que acao voce esta fazendo pra ocorrer isso? clicando onde, com que dados em qual formulario?

[quote=Paulo Silveira]bem estranho, nao ha nenhuma classe sua na stacktrace. poderia ate ser um bug no primefaces, que versao voce esta utilizando? experimente o upgrade.

e que acao voce esta fazendo pra ocorrer isso? clicando onde, com que dados em qual formulario?[/quote]

estou usando a 2.2
Tentarei fazer um upgrade e ver o q dá.

Eu tenho uma pagina principal com um DataTable q lista todos os dados do Banco, quando insiro um dado, e atualizo para que mostre ele me gera esse erro.

Acabei de alterar para a 3.1.1 e o erro continua =x

que dados voce esta inserindo em que campos da pagina, que estao linkados a quais componentes/managed beans?
veja o upgrade tambem.

Segue prints dele rodando

sem dados

inserindo

após inserção

erro

O erro é ao mostrar os dados na view, pelo visto seria no metódo getListarLivros da classe LivroController
fiz um debug e ele pega os dados do Banco,

[quote=Paulo Silveira]que dados voce esta inserindo em que campos da pagina, que estao linkados a quais componentes/managed beans?
veja o upgrade tambem.[/quote]

Paulo acha que poderia ser um bug no Hibernate? estou usando o 3.5.6 final

Nao é no Hibernate nao. O bug ta na tabela do prime, na hora de mostrar os dados. Por algum motivo, ao inves de pegar o valor do registro ele tá pegando a string “registro”.

Tenta trocar a tabela pra h:dataTable e ver se funciona? Aí a listaLivros precisa ser um List e não o DataModel do Primefaces.

[quote=Sergio Lopes]Nao é no Hibernate nao. O bug ta na tabela do prime, na hora de mostrar os dados. Por algum motivo, ao inves de pegar o valor do registro ele tá pegando a string “registro”.

Tenta trocar a tabela pra h:dataTable e ver se funciona? Aí a listaLivros precisa ser um List e não o DataModel do Primefaces.[/quote]

Não sei se fiz correto, mas troquei o p:dataTable por h:dataTable

e o listarLivro fiz o seguinte

public List<Livro> getListarLivros() {
        List<Livro> livros = null;
        EntityManager em = getEntityManager();
        em.getTransaction().begin();
        Query q = em.createQuery("Select *from livros");
       livros = q.getResultList();
        return livros;
    }

O erro no stack continua o mesmo =(

Consegui fazer funcionar.
Utilizando o <p:dataTable>
Graças a sua dica sobre mudar o DataModel para para List funcionou, muito obrigado.
Para quem precisar as classes continuam as mesmas só alterei o método getListarLivros da classe LivroController

                    public List<Livro> getListarLivros() {  
    EntityManagerFactory factory =
                Persistence.createEntityManagerFactory("academico");

        EntityManager manager = factory.createEntityManager();       
       Query query = manager.createQuery("SELECT l FROM Livro l");
        List<Livro> editoras = query.getResultList();
        for(Livro l:editoras){
    }
        return editoras;
    }

Que bom!