CRUD JSF 2.0 + Hibernate – Exemplo Gerenciando Livros

8 06 2010
Este blog possui um novo domínio agora jamacedo.com, clique aqui para acessá-lo!

Bom dia a todos!

Hoje vou apresentar todos os passos necessários para a construção de um CRUD (Create, Read, Update and Delete) utilizando Java Server Faces 2.0 para facilitar a criação das páginas e a comunicação destas com as classes Java e Hibernate para realizar a persistência dos dados.

Para o desenvolvimento eu utilizei o Netbeans 6.8 que já conta com suporte ao JSF 2.0 e ao Hibernate 3 facilitando o trabalho de baixar os frameworks e coloca-los no projeto, porém, fica a cargo do desenvolvedor escolher a IDE de sua preferência para a criação!

O exemplo para a criação do CRUD será dado através da gerencia de livros, um exemplo simples mas capaz de mostrar como as operações básicas de um sistema podem ser efetuadas com JSF.

A segunda parte deste CRUD com utilização de ajax e da biblioteca de componentes PrimeFaces está disponível aqui!

Pré Requisitos

Netbeans ou Eclipse

JSF 2.0

Hibernate 3

– MySQL

Estrutura do CRUD

O nosso CRUD segue o padrão MVC para programação Web, separando as classes em camadas de acordo com a responsabilidade de cada uma. Abaixo é apresentada a estrutura que criaremos onde Dao, Model, Controller e View serão pacotes do projeto.

Cada livro no CRUD terá as seguintes informações: título, autor, páginas, editora, isbn e avaliação que serão mantidas no banco de dados.

Criando o Banco de Dados…

O CRUD utilizará Banco de Dados MySQL, para isso, crie um squema e uma tabela no seu banco como está descrito abaixo.

Squema

CREATE DATABASE IF NOT EXISTS livraria;

Tabela

CREATE TABLE `livro` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`autor` varchar(255) DEFAULT NULL,
`avaliacao` int(11) NOT NULL,
`editora` varchar(255) DEFAULT NULL,
`isbn` varchar(255) DEFAULT NULL,
`paginas` int(11) NOT NULL,
`titulo` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

Criando as Camadas…

Model

O pacote Model do projeto deve conter uma classe chamada Livro que será um POJO (Plain Old Java Object) com as annotations do hibernate necessárias para utilização do framework. A classe deve ficar de acordo com esta:

package Model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
*
* @author José Alexandre
*/
@Entity
public class Livro implements Serializable {

@Id
@GeneratedValue
private long id;
private String titulo;
private String autor;
private int paginas;
private String editora;
private String isbn;
private int avaliacao;

public Livro() {
}

public Livro(long id, String titulo, String autor, int paginas, String editora, String isbn, int avaliacao) {
this.id = id;
this.titulo = titulo;
this.autor = autor;
this.paginas = paginas;
this.editora = editora;
this.isbn = isbn;
this.avaliacao = avaliacao;
}

public String getAutor() {
return autor;
}

public void setAutor(String autor) {
this.autor = autor;
}

public int getAvaliacao() {
return avaliacao;
}

public void setAvaliacao(int avaliacao) {
this.avaliacao = avaliacao;
}

public String getEditora() {
return editora;
}

public void setEditora(String editora) {
this.editora = editora;
}

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getIsbn() {
return isbn;
}

public void setIsbn(String isbn) {
this.isbn = isbn;
}

public int getPaginas() {
return paginas;
}

public void setPaginas(int paginas) {
this.paginas = paginas;
}

public String getTitulo() {
return titulo;
}

public void setTitulo(String titulo) {
this.titulo = titulo;
}

}

Dao

O pacote Dao vai realizar a comunicação com o banco utilizando o hibernate para salvar, listar alterar e excluir livros. Dentro deste pacote, deve ser criada uma interface chamada LivroDao, uma classe chamada LivroDaoImp e uma classe chamada HibernateUtil (realizará a conexão com o banco) da mesma forma que estas:

Interface LivroDao

package Dao;

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

/**
 *
 * @author José Alexandre
 */
public interface LivroDao {

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

}

Classe LivroDaoImp

package Dao;

import Model.Livro;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author José Alexandre
 */
public class LivroDaoImp implements LivroDao {

    public void save(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(livro);
        t.commit();
    }
    public Livro getLivro(long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (Livro) session.load(Livro.class, id);
    }
    public List<Livro> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Livro").list();
        t.commit();
        return lista;
    }
    public void remove(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(livro);
        t.commit();
    }
    public void update(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(livro);
        t.commit();
    }
}

Classe HibernateUtil

package Utils;

import Model.Livro;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/**
 * Hibernate Utility class with a convenient method to get Session Factory object.
 *
 * @author José Alexandre
 */
public class HibernateUtil {

    private static SessionFactory sessionFactory;

    private HibernateUtil() {
    }

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            try {
                // Create the SessionFactory from standard (hibernate.cfg.xml)
                // config file.
                AnnotationConfiguration ac = new AnnotationConfiguration();
                ac.addAnnotatedClass(Livro.class);
                sessionFactory = ac.configure().buildSessionFactory();
            } catch (Throwable ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
            return sessionFactory;
        } else {
            return sessionFactory;
        }
    }

Controller

O pacote Controller vai realizar a comunicação da Camada de Visão representada por nossas páginas JSF com o banco de dados sendo responsável por realizar as operações requisitadas nas páginas JSF e em seguida encaminhar o usuário para uma página. A classe a ser criada deve chamar LivroController e precisa ser escrita dessa forma:

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.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author José Alexandre
 */
@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 String prepararAdicionarLivro(){
        livro = new Livro();
        return "gerenciarLivro";
    }
    public String prepararAlterarLivro(){
        livro = (Livro)(listaLivros.getRowData());
        return "gerenciarLivro";
    }
    public String excluirLivro(){
        Livro livroTemp = (Livro)(listaLivros.getRowData());
        LivroDao dao = new LivroDaoImp();
        dao.remove(livroTemp);
        return "index";
    }
    public String adicionarLivro(){
        LivroDao dao = new LivroDaoImp();
        dao.save(livro);
        return "index";
    }
    public String alterarLivro(){
        LivroDao dao = new LivroDaoImp();
        dao.update(livro);
        return "index";
    }
}

View

O pacote View é composto por páginas JSF que irão executar o pedido de listagem, alteração, exclusão e adição de Livros, o nosso projeto precisará de duas páginas JSF uma chamada index.xhtml que listará os Livros do Usuário e permitirá excluí-los e acessar as páginas de alteração e inserção, a segunda página chamada gerenciarLivro.xhtml será criada para realizar a adição e alteração dos livros. As duas páginas se comunicam diretamente com os métodos e atributos da classe LivroController permitindo a interação de forma fácil com o banco de dados. Em seguida são apresentadas as páginas necessárias.

Página index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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">
    <h:head>
        <title>Gerenciador de Livros</title>
    </h:head>
    <h:body>
        <h1>Gerenciador de Livros</h1>
        <h:dataTable var="livro" value="#{livroController.listarLivros}">
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Título"/>
                </f:facet>
                <h:outputText value="#{livro.titulo}" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Autor"/>
                </f:facet>
                <h:outputText value="#{livro.autor}"/>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Páginas"/>
                </f:facet>
                <h:outputText value="#{livro.paginas}"/>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Editora"/>
                </f:facet>
                <h:outputText value="#{livro.editora}"/>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Isbn"/>
                </f:facet>
                <h:outputText value="#{livro.isbn}"/>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Avaliação"/>
                </f:facet>
                <h:outputText value="#{livro.avaliacao}"/>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Alterar"/>
                </f:facet>
                <h:form>
                    <h:commandButton action="#{livroController.prepararAlterarLivro}" value="Alterar"/>
                    </h:form>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Excluir"/>
                </f:facet>
                <h:form>
                    <h:commandButton action="#{livroController.excluirLivro}" value="Excluir"/>
                    </h:form>
            </h:column>
        </h:dataTable>
        <br/>
        <h:form>
            <h:commandLink value="Novo Livro" action="#{livroController.prepararAdicionarLivro}"/>
        </h:form>
    </h:body>
</html>

Página gerenciarLivro.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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">
    <h:head>
        <title>Gerenciador de Livros</title>
    </h:head>
    <h:body>
        <h1>Gerenciador de Livros</h1>
        <h:form>
            Título <h:inputText value="#{livroController.livro.titulo}"/><br/>
            Autor: <h:inputText value="#{livroController.livro.autor}"/><br/>
            Paginas: <h:inputText value="#{livroController.livro.paginas}"/><br/>
            Editora: <h:inputText value="#{livroController.livro.editora}"/><br/>
            ISBN: <h:inputText value="#{livroController.livro.isbn}"/><br/>
            Avaliação: <h:selectOneMenu value="#{livroController.livro.avaliacao}">
                <f:selectItem itemLabel="1" itemValue="1"/>
                <f:selectItem itemLabel="2" itemValue="2"/>
                <f:selectItem itemLabel="3" itemValue="3"/>
                <f:selectItem itemLabel="4" itemValue="4"/>
                <f:selectItem itemLabel="5" itemValue="5"/>
            </h:selectOneMenu><br/>
            <h:commandButton action="#{livroController.adicionarLivro}" value="Inserir Novo Livro"/>
            <h:commandButton action="#{livroController.alterarLivro}" value="Alterar Livro"/>
            <br/>
            <h:commandLink action="index" value="Voltar"/>
        </h:form>
    </h:body>
</html>

Configurações necessárias…

Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Arquivo hibernate.cfg.xml

Este arquivo configura o hibernate de acordo com seu banco de dados note que é preciso adicionar ainda o seu usuário no banco de dados, sua senha e caso seja necessário o ip e a porta do banco.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/livraria</property>
    <property name="hibernate.connection.username">seuUsuario</property>
    <property name="hibernate.connection.password">suaSenha</property>
  </session-factory>
</hibernate-configuration>

Essas são as informações necessárias para a criação de um CRUD básico para a gerencia de Livros utilizando JSF 2.0 e Hibernate, neste link segue o projeto criado no Netbeans para download.

Por hoje é só pessoal, qualquer dúvida estou a disposição!

A segunda parte deste CRUD com utilização de ajax e da biblioteca de componentes PrimeFaces está disponível aqui!

Abraços!

José Alexandre Macedo


Ações

Information

121 responses

9 06 2010
Luís Theodoro

Muito bom tutorial José Alexandre, bem completo e explicado. Seu blog está ficando muito bom.

9 06 2010
José Alexandre Macedo

Obrigado Luis Theodoro! Qualquer dúvida estamos ai! Abraços!

22 06 2010
Aurélio Mendes

Valeu cara… tá otimo o tutorial… estava com muitas dúvidas pra relacionar a jsp com a controller… me esclareceu muito… já salvei seu blog nos favoritos vou dar uma conferida nos conteúdos depois.. valeu !

23 06 2010
José Alexandre Macedo

Qualquer dúvida estamos aí Aurélio! Valeww pelo feedback!

23 06 2010
Marcelo arantes

Finalmente um exemplo decente de dataTable utilizando editar e alterar no JSF! Muito bom tutorial. Obrigado, salvou o meu dia!
Um abraço!

23 06 2010
José Alexandre Macedo

Marcelo tive o mesmo problema que o seu quando comecei com jsf também estava muito difícil achar exemplos com dataTable e essa foi uma das motivações pra escrever este post! Qualquer dúvida estou a disposição! Abraços!

27 06 2010
Junior Sousa

Ótimo tutorial. Parabéns.

27 06 2010
José Alexandre Macedo

Obrigado Junior!

8 07 2010
Everton

Valew José Alexandre!!… Muito bom turtorial. Estava precisando de um exemplo desses para começar a utilizar JSF e Hibernate.. Valew mesmo. Abs

8 07 2010
José Alexandre Macedo

Obrigado Everton!!
Qualquer dúvida ou sugestão estamos ai!!
Abraços!

14 07 2010
Edson Lopes

Olá José, eu tenho algumas contribuições a fazer:
1) A tabela do seu script está com a primeira letra minúscula (“livro”), e o seu exemplo está buscando a tabela “Livro”, o que gera um erro ao executar, pois funciona com Case Sensitive. (para mudar, bastou um ALTER TABLE livro RENAME Livro e tudo voltou a funcionar)
2) Eu iniciei o projeto primeiramente em Eclipse (Helios), e não consegui colocar para rodar, pois me gera um erro: “java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener” (E que até agora não consegui resolver).
3) Em seu arquivo para download, a pasta Lib possui vários .JARS que não são usados com a implementação do JSF 2, e que deixam o arquivo muito grande para download.
4) Quando mudei para o Netbeans e importei o seu projeto, tudo funcionou legal – fora o lance do Livro, claro, mas não sei o pq, mas estou tendo este erro direto: “Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure”. Volta e meia, assim que faço qualquer ação no sistema, ele me gera o erro, mas depois tento clicar novamente, e dá certo… Mas gostaria de saber se este problema é de conhecimento seu?
Bem, fico por aqui, e te dou os parabéns por esta iniciativa.

15 07 2010
José Alexandre Macedo

Olá Edson!
Primeiramente obrigado pelas contribuições!
Vou comenta-las a seguir:

(1) Achei estranho não funcionar a busca por “Livro” com maiúsculo porque é uma busca feita com a linguagem do hibernate e não diretamente com código sql… se fosse com código sql concordaria que a busca estava errada… estranho que aqui funcionou…
(2) Este você conseguiu né! Na verdade eu não cheguei a testar o exemplo no eclipse mas fico feliz de ter conseguido!
(3) Concordo com você nessa… adicionei as bibliotecas do jsf2 e hibernate pelo netbeans e ele coloca tudo e mais um pouco lá né… cheguei a ver agora se no .war gerado as bibliotecas selecionadas são somente as utilizadas ou todas e me parece que ele coloca todas.. gostaria de saber depois se você sabe alguma forma automática de selecionar apenas as bibliotecas realmente utilizadas…
(4) Este problema não era de conhecimento meu não… na verdade executei alguns testes e em nenhum dos casos este erro apareceu… precisava dps que você me dissesse o momento especifico que o erro ocorre ou me passasse todo o erro pra dar uma olhada… dei uma pesquisada e em alguns casos este erro era causado por algumas configurações erradas como porta configurada errada… mas não deve ser seu caso…

Agradeço mais uma vez as contribuições!
Valeww!

14 07 2010
Edson Lopes

Para o Número 2, eu consegui rodar no Eclipse! 😀
Tive problemas com o dom4j-1.6.1.jar, mas já foi resolvido.

15 07 2010
VSousa

Sou iniciante em desenvolvimento com Java, JSF e Hibernate. Estou usando este modelo para aprender, mas na hora de rodar o teste, ocorreu o seguinte erro [java.lang.ClassNotFoundException: ] tbm, já coloquei na lib do projeto o dom4j.jar. Gostaria de saber como vc resolveu o problema.
Grata.

15 07 2010
José Alexandre Macedo

VSousa, você está utilizando o Eclipse né?! Vamos ver se o Edson nos informa mais algum detalhe utilizado por ele para execução no eclipse… caso contrário posso tentar, assim q possível, adaptar o exemplo para o eclipse…

Qualquer outro problema estou a disposição!

15 07 2010
VSousa

José Alexandre, se você quiser eu te passo o projeto que fiz no eclipe para você ver..

15 07 2010
Edson Lopes

Bem, eu consegui fazer o projeto funcionar no Eclipse blz… Agora sobre o seu erro de [java.lang.ClassNotFoundException], vc tem que mostrar o nome da classe que ele não está encontrando para eu poder te ajudar.
No mais, vou postar o código do meu projeto no 4Shared em breve para os colegas, ok. (estou no trabalho agora, e está na máquina de casa)

15 07 2010
José Alexandre Macedo

Edson, depois nos passe o link então do código no 4shared para disponibiliza-lo para os interessados em rodar no eclipse!

15 07 2010
VSousa

Edson Lopes :Para o Número 2, eu consegui rodar no Eclipse! Tive problemas com o dom4j-1.6.1.jar, mas já foi resolvido.

Gostaria de saber como você resolveu este problema.

15 07 2010
VSousa

VSousa :José Alexandre, se você quiser eu te passo o projeto que fiz no eclipe para você ver..

Jose Alexandre, já resolvi o problema…tks.

15 07 2010
José Alexandre Macedo

VSousa, caso queira compartilhar como resolveu o problema ou o código para quem for utilizar no eclipse, fique a vontade!

15 07 2010
VSousa

Como ainda sou iniciante, meu erro foi não observar a informação completa. Bem, tive que baixar um novo jta.jar e colocar na JDK/JRE/LIB.

15 07 2010
Edson Lopes

Pessoal, aqui vai os fontes do projeto feito no Eclipse.
http://www.4shared.com/file/1ct8eBjS/CrudLivros_JSF_HIBERNATE.html

Eu não alterei nada que o caro amigo José fez em seus códigos originais, apenas coloquei tudo no Eclipse, retirei as Jars que não fazem parte (agora são apenas 15), coloquei para funcionar e ver se dava certo, e postei no 4Shared como havia dito.

Para os erros que estava dando em meu caso, aqui vão as respostas:

1) Realmente deu este erro de grafia, pois quando se cria a tabela com aspas, ele respeita a grafia idêntica, e como o Hibernate estava procurando por Livros com o L em maiúsculo devido ao nome do objeto, ele não funcinou logo de cara, então rodei o código “ALTER TABLE livro RENAME Livro e tudo voltou a funcionar.
2) Quanto a este, eu resolvi colocando as Jars que estão no link informado neste comentário aqui (pasta lib do projeto).
3) Sobre esta dica, eu retirei alguns Jars e de 22 foi para 15. (Mas não sei como retirar automaticamente os Jars não utilizados no Netbeans.)
4) Para este erro, eu vi que era problema da internet aqui de casa, que é muito lenta, e o meu banco está online, ou seja, o Hibernate local é muito mais rápida, e não aguenta esperar a resposta do servidor MySQL, então me gera os erros de “Communications link failure”, mas nada grave, é só clicar novamente nas ações que desejar e ele funciona. (Para terminar com isto, o usuário tem que alterar as configurações de “timeout” do web.xml).
Bem, creio que seja só isto…
Abração a todos.

17 07 2010
5 08 2010
Renato Diniz

Bem legal. Obrigado.

24 08 2010
juniorsatanas

Bom perfeito … parabéns ..

add aqui como favorito.. otimo blog

666
juniorsatanas

24 08 2010
José Alexandre Macedo

Obrigado Junior!

30 08 2010
MVS

Excelente Post. Vai ajudar muito. 😀

Obrigado.

31 08 2010
juniorsatanas

Alexandre, seria bom adicionar mais uma classe, autor, fazer um relacionamento OneToMany, adicionar Primefaces + Spring security..O que você acha ?

SUPER CRUD !

31 08 2010
José Alexandre Macedo

E ai Junior, vou apresentar algumas das suas sugestões nos próximos posts!

Fique ligado no blog!

Abraços!

7 09 2010
André

Cara ótimo Post, vai me ajudar bastante para inicar com JSF.
Ocorreu tudo OK, mas estou com 2 probleminha:
1 – ele não lista os registros salvos no banco;
2 – quando eu clico em ”Novo Livro” ele me gera um erro: javax.el.PropertyNotFoundException: /index.xhtml @68,99 action=”#{livroController.prepararAdicionarLivro}”: Target Unreachable, identifier ‘livroController’ resolved to null

Fico no aguardo. e Vleu!!!

7 09 2010
José Alexandre Macedo

E ai André, me diz uma coisa, você colocou o annotation @ManagedBean em cima da classe livroControle?? vc conferiu se está realmente salvando no banco? me responda essas para ter uma ideia melhor ok?! Abraços!

22 09 2010
Vinícius Pádua

estou com esse mesmo problema!

18 04 2012
igor

Estou com o mesmo problema =/

13 09 2010
CRUD JSF 2.0 + Hibernate: Parte 2– Utilizando a biblioteca Primefaces no Gerenciador de Livros « José Alexandre Macedo Blog

[…] descrever neste artigo algumas mudanças no nosso CRUD JSF 2 para que ele passe a interagir com o usuário utilizando ajax, também vamos melhorar a interface […]

21 09 2010
Lucas

Excelente POST…
Executei passo a passo no netbeans, mas quando executo aparece o titulo na tela e não aparece mais nada logo abaixo…e que pode ser?

Obs: Não aparece nenhuma mensagem de erro nesse processo!

21 09 2010
José Alexandre Macedo

Olá Lucas,

Da uma olhada na saída do tomcat do netbeans se não aparece nada… caso apareça ou não me fale dps!

Abraços,
José Alexandre

21 09 2010
Lucas

Opa Alexandre, segue o erro no tomcat!

21/09/2010 14:12:06 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
javax.faces.FacesException: Can’t parse configuration file: jndi:/localhost/padraoJSF/WEB-INF/faces-config.xml: Error at line 18 column 25: cvc-complex-type.2.4.a: Invalid content was found starting with element ‘managed-bean-class’. One of ‘{“http://java.sun.com/xml/ns/javaee”:description, “http://java.sun.com/xml/ns/javaee”:display-name, “http://java.sun.com/xml/ns/javaee”:icon, “http://java.sun.com/xml/ns/javaee”:managed-bean-name}’ is expected.
at com.sun.faces.config.ConfigureListener.parse(ConfigureListener.java:1438)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:376)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
21/09/2010 14:12:08 org.apache.catalina.core.ApplicationContext log
INFO: Initializing WebApplicationContext for servlet ‘tradingapp’
21/09/2010 14:12:08 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
21/09/2010 14:12:08 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()

21 09 2010
José Alexandre Macedo

E ai Lucas,

você possui um arquivo faces-config.xml no seu projeto?!
me parece que o erro esta relacionado a ele… se você tiver este arquivo delete ele e tente executar…

21 09 2010
Lucas

Poise, tirei ele do projeto…
Mas continua o mesmo problema!

Parece que não reconhece do para baixo. (index.xhtml)

21 09 2010
Lucas

” “

21 09 2010
Lucas

Consegui resolver…
De alguma forma não estava reconhecendo um jar no projeto!
Retirei e inseri novamente e funcionou!
De qualquer forma agradeço José!

21 09 2010
José Alexandre Macedo

Blz então Lucas, qualquer coisa estou ai!

Abraços!

22 09 2010
Erick Basilio

Parabéns pelo excelente tutorial! Estou iniciando no Faces, estava com dúvidas sobre os padrões do JSF 1.2 e 2.0, mas nesse tutorial fica claro as facilidades da nova versão ainda com a ajuda do Primefaces. Obrigado!

22 09 2010
José Alexandre Macedo

Obrigado Erick!

24 09 2010
Eugênio

Primeiramente parabéns, o seu tutorial ta nota 10.
Agora algumas duvidas aqui de iniciante. O web.xml e o hibernate.cfg.xml ficam dentro do package view?
O nome do meu Projeto eu fiz como “AdmLivro”
Pra mim abrir a pagina é no http://localhost:8080/AdmLivro/index.xhtml?
Se for não estou conseguindo. Se você pudesse tirar um print da estrutura de suas paginas e podesse postar aqui ou me mandar por email eu agradeceria.
Valeuu

24 09 2010
José Alexandre Macedo

Olá Eugênio,

obrigado pelos parabéns…

O web.xml deve ficar na pasta WEB-INF esta pasta fica na pasta web.
Já o hibernate.cfg.xml deve ficar na pasta java, a pasta java fica na pasta src.
Para vc abrir a página depois de executado o tomcat e implantado o projeto vc deve acessar http://localhost:8080/AdmLivro/index.jsf
se 8080 for a porta onde o tomcat estiver rodando…

caso não tenha entendido ou não funcione ainda me diga…

abraços,
José Alexandre

26 09 2010
Eugênio

Obrigado pela resposta rápida. Aparentemente ta tudo feito corretamente.
Mas quando eu tento acessar a pagina da pagina nao encontrada. Estou tentando pelo eclipse. Depois vou tentar no netbeans pra ver se conseguido.

26 09 2010
José Alexandre Macedo

No tomcat aparece alguma coisa?!
Qualquer coisa vc fala então!
Abraços.

26 09 2010
Eugênio

Meu tomcat ta assim. To achando que ta faltando alguma lib.

26/09/2010 17:41:00 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
26/09/2010 17:41:00 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:AdmLivros’ did not find a matching property.
26/09/2010 17:41:01 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
26/09/2010 17:41:01 org.apache.coyote.ajp.AjpProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
26/09/2010 17:41:01 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1376 ms
26/09/2010 17:41:01 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
26/09/2010 17:41:01 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.2
26/09/2010 17:41:03 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Inicializando Mojarra 2.0.3 (FCS b03) para o contexto ‘/AdmLivros’
26/09/2010 17:41:05 com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: Anotações PostConstruct/PreDestroy presentes. Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.
26/09/2010 17:41:06 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
26/09/2010 17:41:06 org.apache.coyote.ajp.AjpProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
26/09/2010 17:41:06 org.apache.catalina.startup.Catalina start
INFO: Server startup in 4915 ms

29 09 2010
Eugênio

Esse problema do tomcat ja resolvi.
Tem como você disponibilizar as lib que você usou nesse seu exemplo?

29 09 2010
José Alexandre Macedo

Bom dia Eugênio,

Você pode baixar o projeto aqui e ir até a pasta build > web > WEB-INF > lib e lá estarão todas as bibliotecas utilizadas!

Abraços!

29 09 2010
Eugênio

Deu certo agora, o problema era as lib mesmo.
Parabéns novamente, vou ficar de olho no blog.
Gostei do conteudo.

1 10 2010
Sérgio Marques

Excelente tutorial ! Programava já em Struts com EJB etc e quando fiz esse primeiro em JSF com hibernate eu achei tudo muito mais fácil ! Voce tem algum tutorial com JSF + Hibernate + EJB ???

1 10 2010
José Alexandre Macedo

Olá Sérgio,

Por enquanto não… mas é uma ideia para melhorar este!

Espero q tenha gostado msmo!

Abraços!

8 10 2010
Pedro Henrique Castro

Olá José, parabéns pela sua disponibilidade em auxiliar quem está iniciando a desenvolver utilizando essas tecnologias.

Segui os passos do primeiro tutorial, porém estou tendo o mesmo problema mencionado pelo amigo acima. Quando executo o projeto a página index.xhtml renderiza apenas a tag a não é renderizada. Como o amigo acima não mencionou o que fez, você tem alguma idéia do que possa ser? Estou utilizando o NetBeans 6.8.

Forte abraço.

8 10 2010
Pedro Henrique Castro

Olá José, só pra constar!

Eram problemas referentes a .jar mesmo. Fiz download de seu exemplo e peguei os sua pasta lib e aí o projeto funcionou.

Estava procurando um exemplo assim para iniciar meu TCC e agora creio que conseguirei andar com ele, pois até então tinha tentado diversos projetos e não havia tido muito sucesso.

13 10 2010
José Alexandre Macedo

Boa sorte no TCC Pedro…

9 10 2010
André

Primeiro parabens pelo POST, me ajudou muito. Segundo, cara tentei implementar em cima do teu CRUD uma autenticação de usuário e estou tendo seria dificuldades, será que vc não poderia dar um complemento no POST, colocando a questão de login.

Fico no aguardo.

9 10 2010
José Alexandre Macedo

Olá André!
Obrigado velho…
Estou afim de fazer isso msmo!
Vamos ver se essa semana consigo um tempo pra fazer esta melhoria no post!!
Fique de olho que deve ser o próximo post…
Abraços!

14 10 2010
Luis

Uma coisa que eu não entendi mto bem foi: vc chama um livroController.listarLivro

mas esse método não existe no LivroController, correto?

14 10 2010
José Alexandre Macedo

Olá Luis,

O método que existe é getListarLivros() é uma regra que eu esqueci de mencionar, você precisa usar o get para poder utilizar um valor ou lista na view e na hora de acessar é sem o get mesmo e com a primeira letra em minúsculo…

Qualquer coisa estou ai!

Abraços!

14 10 2010
Marcelo Wanderley

Ok Alexandre,

Irei importar as bibliotecas do seu projeto.

Outra coisa.
Como se faz para cadastrar o dados em mais de uma tabela. No caso tabela relacionada?

public void save(Livro livro) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction t = session.beginTransaction();
session.save(livro);
t.commit();
}

15 10 2010
José Alexandre Macedo

Você esta interessado em relacionamentos 1 para muitos e muitos para muitos com hibernate?!
Devo colocar um exemplo 1 para muitos neste CRUD em um próximo artigo junto a segurança utilizando Spring Security…

8 11 2010
Felipe

No seu exemplo o acesso aos métodos do DAO poderia ser estático ao invés de criar uma nova instância a cada acesso?

8 11 2010
José Alexandre Macedo

Olá Felipe,

O ideal seria utilizar inversão de controle para não se preocupar e não precisar dar o new nem deixar static… mais caso esteja apertado com o tempo pra utilizar ioc então pode usar o static…

Qualquer coisa estou ai!
Abraços,
José A Macedo

29 11 2010
juniorsatanas

Minha Dúvida e como por outra classes relacionada com a que existe, tipo ManyToOne, e como salvar usando um SelectOnMenu !?

Ficaria agradecido ! com um exemplo !

30 11 2010
José Alexandre Macedo

vou te responder através do email que me mandou!

29 11 2010
juniorsatanas

Esse exemplo pega com Glasfishe ?

30 11 2010
José Alexandre Macedo

pega sim Junior!

1 12 2010
Claudney

Amigo acho que você esqueceu do faces-config.xml

2 12 2010
José Alexandre Macedo

Olá Claudney,
No jsf 2 o uso do faces-config não é obrigatório, apesar de ja ter havidos casos onde eu precisei cria-lo mas sem descrever nada nele…

Abraços!

16 12 2010
CRUD JSF 2.0 + Hibernate: Parte 2– Utilizando a biblioteca Primefaces no Gerenciador de Livros | José Alexandre Macedo Blog

[…] descrever neste artigo algumas mudanças no nosso CRUD JSF 2 para que ele passe a interagir com o usuário utilizando ajax, também vamos melhorar a interface […]

5 01 2011
Vic Bormolini

Eis aqui um excelente tutorial. Parabéns pela publicação.
Muito obrigado pela ajuda. Com isso me fez re-pensar meus conceitos e capacidade de programação… podemos seguir muito além disso.. basta dar o primeiro passo… e agora foi dado! agora me seguuuuura… here we go!!!!

5 01 2011
Vic Bormolini

José Alexandre, deixa eu te perguntar duas coisas.
1) Como faço para que a lista fique por ordem de Titulo + Avaliacao
2) Como faço para que apareca somente livros que nao contem AVALIACAO = 1

muito obrigado
Vic

6 01 2011
José Alexandre Macedo

Olá Vic,

Dúvida 1: Você pode utilizar um componente do primefaces que permite ao usuário escolher a ordenação! O link é este: http://www.primefaces.org/showcase/ui/datatableSorting.jsf

Duvida 2: Você pode fazer isso na página renderizando apenas as linhas com Avaliação > 1 ou no managed bean, já retornando uma lista filtrada… eu acho melhor fazer no managed bean para evitar o uso de condicionais na camada de apresentação.. você ainda pode utilizar um componente do primefaces que permite filtrar http://www.primefaces.org/showcase/ui/datatableFiltering.jsf

Qualquer dúvida estou aí!

Abraços.

14 01 2011
Vic Bormolini

Jose Alexandre. Fiquei muito feliz com o resultado. Funcionou direitinho.
Num poste anterior vc disse que iria publicar alguma coisa relacionamento @onetomany. Você tem idéia de quando isso já está no forno? Procurei diversos artigos na web mas nao encontrei nada simples como foi neste exemplo do projeto livro.

obrigado e um abraço
Vic

14 01 2011
José Alexandre Macedo

Olá Vic,

Estou escrevendo o post com jsf e spring security 3 e nele coloquei um exemplo do relacionamento @OneToMany…
Os códigos já estão pronto e estou só escrevendo… acho que no início da semana coloco no ar! 🙂

Abraços,
José Alexandre

8 01 2011
Renan

olá !

obrigado por ter postado esse exemplo de jsf com hibernate, foi de grande ajuda.Só queria fazer uma observação, o seu projeto já pronto do tutorial eu não consegui colocar pra funcionar, o que funcionou foi esse corrigido que o outro carinha postou ali nos comentários
http://www.4shared.com/file/JZP3v4wa/CrudLivros_JSF_HIBERNATE.html

Não estou dizendo que o seu não está certo, só que para nós iniciantes é sempre bom ter algo pronto que funcione certo porque a gente não sabe onde corrigir os códigos.

Então se pudesse colocar esse link aí no seu tutorial, iria ajudar muito os futuros visitantes dessa página

mais uma vez obrigado

8 01 2011
José Alexandre Macedo

Olá Renan,

Que bom que te ajudou!

Talvez a versão que disponibilizei no blog não tenha funcionado para você porque o projeto esta pronto para o netbeans e a versão no 4shared disponibilizada pelo Edson é para o Eclipse… você deve estar utilizando o eclipse né?!

Agradeço sua sugestão!

Qualquer outra dúvida, crítica ou sugestão estou a disposição!

Abraços

18 01 2011
Vic Bormolini

Olá Jose Alexandre, boa tarde.
Por favor, teria como vc me disponibilizar o código do exemplo de relacionamento @OneToMany para implementar no Livro? Veja bem, não estou te pressionando… é que realmente estou ancioso em poder estar estudando esse tema…

um abraco, Vic

18 01 2011
José Alexandre Macedo

Olá Vic!

Não está pressionando não viu! hehe
Postei a parte 3 do crud mas foi no novo domínio do blog jamacedo.com o link para o tutorial é este: http://jamacedo.com/2011/01/crud-jsf-2-parte-3-seguna-com-spring-security-3/

Vou estar te mandando no email alguns slides bons de uns amigos meus que poderam explicar melhor a parte do hibernate pra você!

Qualquer coisa estou aí!

Abraço!

18 01 2011
Vic Bormolini

Na mosca! bom, agora sou o seu mais novo seguidor no Twitter…

abraço e obrigado
Vic

19 01 2011
Vic Bormolini

Estou alterando o bco de dados Livro para o meu específico porém estou com um erro de mapeamento.. An Error Occurred: ordemdeservico is not mapped [from ordemdeservico]
Eu mapeei em Context.xml, persistente.xml, hibernate.cfg.xml e no livroDaoImp.java.. mas o erro persiste. Será que tenho alterar em mais outro lugar?

desde já, obrigado

9 02 2011
Axel Alexander Martins

Show de bola cara……… você e o cara

10 02 2011
Romulo Oliveira

Olá.
Muito bom o projeto, importei no meu netbeans e só tive que resolver problemas de dependência que o próprio IDE faz quase tudo. Está rodando perfeitamente. Só olhando seu artigo não precisa ficar comprando livro, só mesmo olhar a especificação de cada framework no projeto.

Estou começando novamente a tentar aprender Java pois venho do .Net e programação Desktop e hoje trabalho profissionalmente com o PHP (Zend Framework, incrível!).

Só me responde umas dúvidas quando puder!

1) Por que tenho que criar sempre uma interface LivroDao e depios uma classe para implementar? Não poderia usar direto a classe LivroImp? Pois tenho 1 interface que será implementada apenas uma única vez. Bom, acho estranho isso.

2) Como faço para usar templates? Por exemplo tenho um sistema gerencial, onde tenho menu lateral, barra de titulo e as views sempre estarão no meio do template. Não quero duplicar nada. Como faço isso com JSF? Ví no livro do Edson Gonçalves que tem algo que posso fazer mas não consegui reproduzir direito.

3) E neste template principal preciso saber qual controladora ou ação foi chamada para poder chamar algum javascript especifico, para não ficar sobrecarregando sem necessidade.

Obrigado!

Romulo
Nova Friburgo – RJ

10 02 2011
José Alexandre Macedo

Olá Romulo,
Que bom que o artigo foi útil aí!
Respondendo as dúvidas:
1) Você utiliza a interface por precaução, não sabemos se será necessário mudar a implementação para manipular os objetos no banco no futuro. Utilizando a interface, caso você precise realizar mudanças, elas serão mais fáceis de serem aplicadas!
2) Para utilizar templates com jsf você deve usar facelets (já vem incluso no jsf 2). Recomendo este tutorial para você implementar: http://www.coreservlets.com/JSF-Tutorial/jsf2/#Templating

Qualquer coisa estou a disposição!

Caso queira ler a 3ª parte ela está disponível no novo domínio do blog neste link: http://jamacedo.com/2011/01/crud-jsf-2-parte-3-seguna-com-spring-security-3/

Abraços,
José Alexandre Macedo

10 02 2011
Vic Bormolini

Em relação a questão 02, gostaria de expressar minha dica…
Fui a um minicurso de CRUD em JSF na Globalcode Campinas e tive a oportunidade de ver como os templates de tela trabalham. Realmente são ótimos. Não sei exatamente qual é o exemplo, caso queira dar uma olhada… http://www.globalcode.com.br/gratuitos/estudosCasos;jsessionid=710226800BE4AFE8BD2EA3F8E7E043F8

boa sorte e um abraço a tds!

25 02 2011
Romulo Oliveira

Bom dia.

Comecei a olhar o JSF em seu site, daí comecei a me interessar. Comprei 2 livros e venho acompanhando blogs tipo este. Realmente parece muito legal.

Daí surgem outras dúvidas, vamos lá!:

1) Para cada página eu preciso ter uma classe, um bean gerenciado, para fazer a comunicação. Meu sistema hoje, que é em Zend Framework, eu tenho 70 páginas. Quero jogar tudo para JSF + Facelets. Então eu ter 70 beans gerenciados não seria pesar demais não? Fico preocupado com esta questão.

2) Sou gerente de desenvolvimento de uma empresa em Macaé. Este sistema que desenvolvemos a 8 anos tem 600 tabelas, 3000 stored procedures, 80 views, 60 triggers e 120 functions. Usamos VB6 com SQL Server. Temos tabelas muito grandes, com 50 ou 80 campos. Fico imaginando migrando isso tudo para o hibernate. Ele aguentaria isso? Olhando o livro que comprei (do Edson Gonçalves, muito bom!) na parte de JPA e Hibernate ele fala das Java Annotations @ManyToOne e @OneToMany onde eu, por exemplo, na classe Pedido crio um Set de ItensPedido. E se eu informo que é LAZE ou EAGER ele já carrega os subobjetos na hora. Se eu tenho uma tabela com muitos campos, esse carregar automatico dele não ficaria pesado? Digo isso pois meu sistema alcançou um patamar muito grande onde um SELECT * se tornou um grande problema. Na maioria das telas tenho que dar um SELECT campos e especificar exatamente pois na performance faz grande diferença.

e por último:
3) Tanto no livro quanto na internet fala-se muito de spring, mas não entendi exatamente o que ele faz, ou uma de suas principais funcões. Poderia explanar um pouco o assunto?

Obrigado!!!!

Romulo
Nova Friburgo – RJ

25 02 2011
José Alexandre Macedo

Olá Romulo,

Vamos lá…

1) Você não precisa ter um managed bean (seria mais interessante chamar managed do que traduzir) por página. Você pode, por exemplo, ter 3 páginas que se relacionam com 1 managed bean. Imaginemos que você tenha 1 managed bean PedidoController, ele pode fornecer atributos e métodos para uma página de listagem de pedidos, uma de inclusão de pedidos e uma de alteração. Tente construir managed beans de acordo com os objetos que você desejar expor para as views.

2)Qualquer processo de migração é tenso, você vai precisar avaliar melhor se compensa utilizar o hibernate, neste caso, olhando assim eu acho que não. Acho que ao carregar ficaria pesado sim. Mas meus conhecimentos no hibernate também não são avançados, então pode e deve haver alguma forma de contornar isso com ele.

3) O Spring é um framework bem parrudo que torna possível o uso da inversão de controle (http://www.arquiteturajava.com.br/livro/inversao-de-controle-cade-minha-chave-de-fenda.pdf) e a criação de web services REST (http://brunopereira.org/webservicesrest-introducao/). Ele também da suporte no desenvolvimento web de aplicações MVC, na segurança (Spring Security), na persistência, em programação orientada a aspecto (AOP) etc. É um assunto meio longo hehe..

Espero ter ajudado um pouco….

Abraços,
José Alexandre Macedo.

14 02 2011
João Paulo

Bom dia,

Primeiramente eu gostaria de parabenizar pelo excelente tutorial. Funcionou perfeitamente comigo. Minha única questão é a seguinte: alguém já debugou a aplicação colocando um ponto de parada no método de listagem da classe LivroDaoImp? E sabe o motivo desse método ser executado mais de uma vez para a listagem efetivamente aparecer na tela? Ficaria grato por uma resposta.

14 02 2011
José Alexandre Macedo

Olá João Paulo,

Fico feliz que tenha gostado do post… estarei verificando o por que do método ser chamado mais de uma vez e logo entro em contato com você!

Abraços,
José Alexandre

20 02 2011
mayko

Olá, parabéns pelo post
tava precisando de um tutorial desses com o primefaces, já trabalho um tempo com Java Web mas utilizo Struts2 e agora quero aprender JSF2!
Logo tbm estarei abrindo um blog sobre programação, pois eu acho que devemos compartilhar nosso conhecimento de forma livre. Sobre o tutorial em si realizei no netbeans 7 beta 2 utilizando o tomcat 7.0.6 e deu certinho!
valeu!

20 02 2011
José Alexandre Macedo

Obrigado Mayko… qualquer coisa estou aí!

Abraços,
José Alexandre Macedo

13 03 2011
bdmstyle

Eai belo tutorial… mto pratico, como sugestão se vc detalhar mais as explicações por exemplo sobre o datamodel etc. Acho que ia ficar mais completo.

14 03 2011
José Alexandre Macedo

Olá bdmstyle,

obrigado pela sugestão 🙂

abraços,
josé alexandre

24 05 2011
Diogo

Muito bom tutorial parabéns, tive problemas no eclipse mais fiz o download do Edson Lopes e consegui resolver aqui, vlw

14 06 2011
Bruno.

Parabéns pelo tutorial José Alexandre, me auxiliou muito nos meus estudos. Gostaria de saber se existe alguma ferramenta RAD (tipo Visual Web JSF) para o Netbeans 7.0 e qual seria ela. Desde já agradeço.

15 06 2011
José Alexandre Macedo

Olá Bruno,

Obrigado pelos parabéns.

Com relação as ferramentas também não to sabendo de nenhuma que possa ser utilizada com o netbeans 7… caso eu descubra te aviso!

Se você quizer continuar acompanhando o blog o endereço é jamacedo.com

Valew pela visita!

Abraços,
José Alexandre

27 07 2011
Salustiano Sampaio

Prezado José Alexandre,

Através do seu artigo “Gerenciando Livros” quebrei diversos paradigmas sobre desenvolvimento web com JSF e Hibernate. Fiz vários pequenos projetos a partir dele. Prá mim foi o divisor de águas.

No momento estou tendo dificuldades com aplicações mestre/detalhe do tipo cabeçalho e itens de vendas. Será que você pode nos presentear com um artigo nesse sentido?

Parabéns pelos seus artigos.

Sampaio

1 08 2011
José Alexandre Macedo

E aí Salustiano,

Agradeço a sugestão!
Nesse momento não poderei escrever sobre isso porque estou envolvidos em alguns projetos mas quem sabe em outro momento!
Boa sorte aí em seus projetos 🙂

Abraços,
José Alexandre

30 07 2011
fredcbranco

Ola parabens pelo tutorial, o meu não da nenhum erro mais o index aparece em branco trazendo apenas o titulo.

31 07 2011
davi

primeiramente ótimo tutorial.
estou usando o eclipse e estou com um pequeno problema.
quando boto pra rodar só aparee a tag Gerenciador de livros…
e da datatable pra baixo não aparece nada…
ja renomeei o nome da tabela para “Livros” e mesmo assim não vai ;(

sou meio noob..
oq será ?

1 08 2011
davi

acabei e tentar rebotar as libs aqui… mas continua o mesmo erro…
ja tentei excluir o faces-config…minha duvida é tambem onde boto o hibernante.cfg.xml…to usando o eclipse..ele ta no diretorio WEB-INF.

01/08/2011 14:15:26 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_26\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Common Files\Ulead Systems\MPEG;C:\PROGRA~1\COMMON~1\ULEADS~1\Mpeg; C:\Program Files\Java\jdk1.6.0_26\bin;C:\Users\Mércia\Desktop\android-sdk\tools;;.
01/08/2011 14:15:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:Livraria’ did not find a matching property.
01/08/2011 14:15:26 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-bio-8080”]
01/08/2011 14:15:26 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-bio-8009”]
01/08/2011 14:15:26 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1889 ms
01/08/2011 14:15:27 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
01/08/2011 14:15:27 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.16
01/08/2011 14:15:28 org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Faces Servlet as unavailable
01/08/2011 14:15:28 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: Servlet /Livraria threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1073)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1021)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
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)
01/08/2011 14:15:28 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“http-bio-8080”]
01/08/2011 14:15:28 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“ajp-bio-8009”]
01/08/2011 14:15:28 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1682 ms

12 08 2011
Raphael

Cara pra mim nao ta funcionado, está dando target unreachable null pro livroController ele não consegue executar nenhum método

15 09 2011
Emerson Romagnoli

José parabéns pelo Tutorial, estou estudando JSF e ficou muito bom o que você fez aqui.
Gostaria de pedir sua ajuda, sou iniciante em Java.
Montei tudo da forma que está descrito acima, porém estou parado já ha uma semana num ponto. Quando tenta criar o AnnotationConfiguration cai na excessão apresentando a mensagem : Initial Section Factory create failed.

Vou colocar aqui o Trace:
15/09/2011 08:19:07 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_25\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\IBM\Infoprint Manager\jre\bin\classic;C:\Program Files\IBM\Infoprint Manager\bin;C:\Program Files\IBM\Infoprint PPFA\bin;C:\Program Files\Borland\Delphi7\Projects\Bpl\;C:\Program Files\CodeGear\RAD Studio\6.0\bin;C:\Documents and Settings\All Users\Documents\RAD Studio\6.0\Bpl;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ThinkPad\ConnectUtilities;C:\Program Files\Intel\WiFi\bin\;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\CodeGear\Delphi Prism\bin;C:\Program Files\CodeGear\Delphi Prism\bin;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Java\jdk1.6.0_25\bin;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;%SystemRoot%;C:\Eclipse;
15/09/2011 08:19:07 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:GestaoLivros’ did not find a matching property.
15/09/2011 08:19:08 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8081
15/09/2011 08:19:08 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 779 ms
15/09/2011 08:19:08 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
15/09/2011 08:19:08 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
15/09/2011 08:19:09 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Inicializando Mojarra 2.1.1 (FCS 20110408) para o contexto ‘/GestaoLivros’
15/09/2011 08:19:10 com.sun.faces.config.ConfigureListener$WebConfigResourceMonitor$Monitor
INFO: Monitoring jndi:/localhost/GestaoLivros/WEB-INF/faces-config.xml for modifications
15/09/2011 08:19:10 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8081
15/09/2011 08:19:10 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
15/09/2011 08:19:10 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/31 config=null
15/09/2011 08:19:10 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2745 ms
15/09/2011 08:19:15 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
15/09/2011 08:19:15 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.PropertyNotFoundException: /index.xhtml @11,73 value=”#{livroController.listaLivros}”: Property ‘listaLivros’ not found on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
15/09/2011 08:20:20 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
15/09/2011 08:20:20 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.PropertyNotFoundException: /index.xhtml @11,77 value=”#{livroController.getListarLivros}”: Property ‘getListarLivros’ not found on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
15/09/2011 08:21:31 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
15/09/2011 08:21:31 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.PropertyNotFoundException: /index.xhtml @11,74 value=”#{livroController.ListarLivros}”: Property ‘ListarLivros’ not found on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
15/09/2011 08:21:36 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
15/09/2011 08:21:36 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.PropertyNotFoundException: /index.xhtml @11,74 value=”#{livroController.ListarLivros}”: Property ‘ListarLivros’ not found on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
15/09/2011 08:21:48 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
0 [http-8081-1] INFO org.hibernate.cfg.annotations.Version – Hibernate Annotations 3.2.0.GA
Initial Section Factory create failed.java.lang.NoSuchFieldError: INSTANCE
15/09/2011 08:21:48 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.ELException: /index.xhtml @11,74 value=”#{livroController.listarLivros}”: Error reading ‘listarLivros’ on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ExceptionInInitializerError
at gestaolivros.utils.HibernateUtil.getSessionFactory(HibernateUtil.java:24)
at gestaolivros.dao.LivroDaoImp.list(LivroDaoImp.java:28)
at gestaolivros.controller.LivroController.getListarLivros(LivroController.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
… 30 more
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.hibernate.type.BasicTypeRegistry.(BasicTypeRegistry.java:94)
at org.hibernate.type.TypeResolver.(TypeResolver.java:59)
at org.hibernate.cfg.Configuration.(Configuration.java:250)
at org.hibernate.cfg.Configuration.(Configuration.java:302)
at org.hibernate.cfg.AnnotationConfiguration.(AnnotationConfiguration.java:87)
at gestaolivros.utils.HibernateUtil.getSessionFactory(HibernateUtil.java:19)
… 42 more
Initial Section Factory create failed.java.lang.NoSuchFieldError: INSTANCE
Initial Section Factory create failed.java.lang.NoSuchFieldError: INSTANCE
15/09/2011 08:23:01 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: livroController, classe do valor: gestaolivros.controller.LivroController).
15/09/2011 08:23:01 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/index.xhtml]
javax.el.ELException: /index.xhtml @11,74 value=”#{livroController.listarLivros}”: Error reading ‘listarLivros’ on type gestaolivros.controller.LivroController
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:731)
at javax.faces.component.UIData.getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
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:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ExceptionInInitializerError
at gestaolivros.utils.HibernateUtil.getSessionFactory(HibernateUtil.java:24)
at gestaolivros.dao.LivroDaoImp.list(LivroDaoImp.java:28)
at gestaolivros.controller.LivroController.getListarLivros(LivroController.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
… 30 more
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.hibernate.type.BasicTypeRegistry.(BasicTypeRegistry.java:94)
at org.hibernate.type.TypeResolver.(TypeResolver.java:59)
at org.hibernate.cfg.Configuration.(Configuration.java:250)
at org.hibernate.cfg.Configuration.(Configuration.java:302)
at org.hibernate.cfg.AnnotationConfiguration.(AnnotationConfiguration.java:87)
at gestaolivros.utils.HibernateUtil.getSessionFactory(HibernateUtil.java:19)
… 42 more
Initial Section Factory create failed.java.lang.NoSuchFieldError: INSTANCE

Isto acontece logo quando tento acessar http://localhost:8081/GestaoLivros e passa na linha onde está

Desde já agradeço
Romagnoli

25 10 2011
Rafael Jesus

José, o melhor tutorial e o “professor mais atencioso que eu já encontrei na Net”, bem preciso de sua ajuda man. Sou desenvolvedor J2ME a pouco tempo e já faz tempo que eu quero programar para JSF, já segui diversas apostilas, inclusive tenho um execelente livro “Progrtamação Java para Web”, mas não consegui sair do “puto” helloworld…Fiz a primeira parte do seu tuto e me apareceu o mesmo erro que me persegue ‘404’ e nenhum erro no console do tomcat7.0. Há alguma outra config a ser feita, ou macete?, o projeto esta exatamente como no seu blog, as libs são: jsf.2.1.2api.jar, jsf.2.2.1impl.jar, as do hibernate 3.6.7.Eclipse Indigo 3.7.outra coisa, na classe HibernateUtil() a AnnotationConfiguration, aparece marcada com um risco, vc sabe o que é? Por favor ajude-me..valeu

25 10 2011
Rafael Jesus

jsf 2.1.2

10 11 2011
Denym

Tudo Bem José, comecei a implementar o seu tutorial no Eclipse e me deparei com um javax.el.MethodNotFoundException. estou usando Eclipse e SeverContainer GlassFish vc pode me ajudar?

o erro segue abaixo
Caused by: javax.el.MethodNotFoundException: /gerenciarLivro.xhtml @34,33 action=”#{livroController.adicionarLivro}”: Method not found: Controller.LivroController@7d6a276.adicionarLivro()
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

10 11 2011
Denym

Estranho Coloquei o “#{livroController.AdicionarLivro}” o A em Maiusculo e rodou salvou no banco e tudo :)…

15 12 2011
Marcia Munhoz

Boa Tarde,

Parabéns pelo tutorial muito didático.
Mas mesmo assim estou com uma dificuldade.
Baixei o seu fonte, instalei no NetBeans e quando executo ele abre a tela de login, mas não consigo me logar.
Como alguém em um comentário anterior disse algo sobre o nome da Tabela com letra maiúscula, criei duas tabelas com o mesmo contúdo, uma como Usuario e outra como usuario, mas mesmo assim não consigo me logar. Não é gerado nenhuma mensagem de erro.

Baixei também o fonte do 4shared p/eclipse e usando a mesma conexão de banco, funciona certinho.

Mas queria usar o spring security.

Será que alguém pode me ajudar?

19 02 2012
Marcos

Olá, Jośe Alexandre. Segui passo a passo o tutorial, mas quando tento executar o sistema, recebo a seguinte mensagem:

livro is not mapped [from livro]

————

O que pode estar acontecendo?

14 09 2012
igrFox

isso é porque o hibernate mapea a classe ele trabalha com objeto relacional então você deve colocar o objeto e nao a tabela por tanto aonde você faz a lista dos livros, deve ser Livro e não livro.

5 03 2012
Joaquim

Olá, não estou conseguindo rodar o exemplo, segue abaixo a mensagem de erro. Me ajude por favor !! De onde vem esse livroController. ????

javax.servlet.ServletException: javax.el.PropertyNotFoundException: /index.xhtml @67,100 action=”#{livroController.prepararAdicionarLivro}”: Target Unreachable, identifier ‘livroController’ resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)

7 05 2012
Maroua

Hola,
I don’t speak your language, I hope you can understand my post.
I have the same problem as you had. Did you find a solution for it?
please share it with me.
Thanks

18 04 2012
igor

tem como utilizar este exemplo com firebird?

21 05 2012
nilo

Boa tarde Alexandre, construí minha aplicação de acordo com o que você mostrou no seu post, mas no entanto a minha aplicação não consegue editar os objetos setados no banco.
Não sei o que esta ocorrendo.

12 07 2012
João henrique

Fiz meu próprio projeto , usando o que vc explico aqui, mas não funciona usando esse web.xml.

O meu fico assim, e tiver que retornar a extensão da página na String

javax.faces.PROJECT_STAGE
Development

Faces Servlet
javax.faces.webapp.FacesServlet
1

Faces Servlet
/faces/*

30

faces/testeJSF.jsp

O action ficou assim

/**
*
* @author SkullDragon
*/
@ManagedBean
@SessionScoped
public class ActionFornecedor {
private String teste;

public String getTeste(){
return this.teste;
}
public String preparaTeste(){
this.teste=”Vamos ver se funciona”;
System.out.println(“testessssssssssssssssssssssssssssssssssss”);
return “gerenciarLivro.xhtml”;

}
}

25 07 2012
Osvaldo Simões

Não usa o facesconfig do JSF ?

28 12 2012
Aurélio

Ola Jose teria um exemplo de um crud com tabelas relacionadas, onte to many?

29 09 2013
jardeljava

José, Meus Parabéns pelo post,

Vi nos comentário as pessoas perguntando muito sobre um post que fale de relacionamento com entidade, então eu tenho um blog que falo justamente disso, de todos os relacionamentos se me permitir divulgar aqui no comentário segue o link os interessados.

http://vejajava.blogspot.com.br/2013/08/mapeamento-de-entidade-com-hibernate.html

http://vejajava.blogspot.com.br/2013/09/mapeamento-de-entidade-manytomany.html

Valeu abraço, Sucesso.!

Deixar mensagem para Lucas Cancelar resposta