Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro ao renderizar tabela

acho que me perdi em algum momento... estou tentando renderizar a tabela mas não estou conseguindo. Alguém pode me ajudar? no meu livro.xhtml eu fiz assim:

<h:dataTable value="#{livroBean.listaLivros}" var="livro">
        <h:column>
            <f:facet name="header">ISBN</f:facet>
            <h:outputText value="#{livro.isbn}"/>
        </h:column>

        <h:column>
            <f:facet name="header">Titulo</f:facet>
            <h:outputText value="#{livro.titulo"/>
        </h:column>

        <h:column>
            <f:facet name="header">Autor</f:facet>
            <h:outputText value="#{livro.autor"/>
        </h:column>

        <h:column>
            <f:facet name="header">Data</f:facet>
            <h:outputText value="#{livro.dataLancamento.time">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
            </h:outputText>
        </h:column>

        <h:column>
            <f:facet name="header">Preço</f:facet>
            <h:outputText value="#{livro.preco"/>
        </h:column>    
    </h:dataTable>

e no meu LivroBean assim:

public List<Livro> listaLivros(){
        return new DAO<Livro>(Livro.class).listaTodos();
    }

Só que tá dando erro no xhtml, falando que ele esperava um valor e encontrou ema expressão... O que tô fazendo errando?

5 respostas

Olá Thatiana,

Eu percebi que em vários lugares do seu livro.xhtml a expression language não foi totalmente fechada. Veja um exemplo:

 <h:outputText value="#{livro.preco"/>

O correto é :

 <h:outputText value="#{livro.preco}"/>

Corrija todos os lugares que falta fechar com } e teste para ver se funciona conforme o esperado.

Abraço

Olá Flavio, realmente estava faltando fechar a tag... mas mesmo assim o erro continua.

<h:dataTable value="#{livroBean.listaLivros}" var="livro">
        <h:column>
            <f:facet name="header">ISBN</f:facet>
            <h:outputText value="#{livro.isbn}"/>
        </h:column>

        <h:column>
            <f:facet name="header">Titulo</f:facet>
            <h:outputText value="#{livro.titulo}"/>
        </h:column>

        <h:column>
            <f:facet name="header">Autor</f:facet>
            <h:outputText value="#{livro.autor}"/>
        </h:column>

        <h:column>
            <f:facet name="header">Data</f:facet>
            <h:outputText value="#{livro.dataLancamento.time}"/>
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
            </h:outputText>
        </h:column>

        <h:column>
            <f:facet name="header">Preço</f:facet>
            <h:outputText value="#{livro.preco}"/>
        </h:column>    
    </h:dataTable>

esta dando esse erro:

HTTP Status 500 - Error Parsing /livro.xhtml: Error Traced[line: 67] O tipo de elemento h:column" deve ser encerrado pela tag final correspondente "</h:column>".

type Exception report

message Error Parsing /livro.xhtml: Error Traced[line: 67] O tipo de elemento h:column" deve ser encerrado pela tag final correspondente "</h:column>".

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error Parsing /livro.xhtml: Error Traced[line: 67] O tipo de elemento h:column" deve ser encerrado pela tag final correspondente "</h:column>".
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

javax.faces.view.facelets.FaceletException: Error Parsing /livro.xhtml: Error Traced[line: 67] O tipo de elemento h:column" deve ser encerrado pela tag final correspondente "</h:column>".
    com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:427)
    com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:410)
    com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:326)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:92)
    com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:165)
    com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:163)
    com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:94)
    com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:89)
    com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
    java.util.concurrent.FutureTask.run(Unknown Source)
    com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
    com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:143)
    com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:62)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:259)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:208)
    com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:113)
    com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.11 logs.

Apache Tomcat/8.0.11
solução!

Resolvi.. tinha uma série de coisas erradas: primeiro é que tenho que definir uma list de livros no meu LivroBean e chamar ela na minha dataTable. Segundo que para eu mostrar o nome do autor tenho que reescrever o método toString de autor.

Não precisa de toString. Faça #{livro.autor.nome}