[APOSTILA] Tutorial JAVA com JSF 2.0, Facelts, Hibernate (JPA) , Spring 3.0 e PrimeFaces

[quote=rpsouza441]Nossa essa parada de validação era o próximo assunto que iria pesquisar para aprender! vlw Wolky

Eu to quebrando a cabeça com uma função que estou tentando colocar. Eu transportei o programa para uma inscrição.
Está com 3 tabelas. Curso, inscrito e inscrição(ManyToMany sem atributos, tem uma PK e duas FK de curso e inscrito).
Eu estou tentando fazer é: o inscrito digita o CPF e esse é validado (achei no GUJ um código que faz isso) e se existir esse CPF no banco abre o “formCad” em modo editar senão abre em modo adicionar.

A minha dificuldade é dizer para o jsf que essa busca é para abrir o editar da entidade, pois o find que o jsf usa mostra uma lista dos encontrados(como já passou pelo validador de cpf só pode existir um).
Alguém tem alguma dica de como consigo fazer isso?

====================EDIT=========================

Pensei em uma solução, foi fazer no jsf a validação do que acontecer, vai ser mais menos assim:

if(CPF = ok) abre a pagina de cadastro

na pagina de cadastro:

if(find.CPF = ok) abre a "busca" do inscrito (output) else abre o cadastrar inscrito (input)

Deve existir outra forma mais limpa, mas essa vai servir :lol:

:roll: as vezes eu caio tão fundo que esqueço do básico [/quote]

rp, tente não usar ManyToMany no hibernate, crie uma tabela auxiliar e todas serão OneToMany ou ManyToOne, tipo… Pessoa e categoria é um relacionamento N para N, crie então o pessoa_categoria, que pessoa é 1 para N no pessoa_categoria e o pessoa_categoria é 1 para N para categoria… não sei se consegui explicar direito, mas de uma pesquisada sobre.

Tente por essa validação retorno do control, toda négocio fica nele, mas o control acessar direto a visão é meio tenso, traga um retorno ou lance uma Exception que você criou para tratar esse fluxo de dados, dentro do managedBean você verifica se ele deu exceção com try catch, e se deu, vc sabe que o CPF não está ok.

Essas 2 semanas que se seguem estarei muito ocupado com meu TCC e iniciação científica, qualquer dúvida mandem por e-mail, posso até postar a resposta aqui para ajudar aos outros que tiverem mesma dúvida, a diferença é que acesso diariamente meu e-mail, já o forum não.

[quote=Wolky]

Sim, você criar uma nova classe Entity que adeque ao seu modelo, por exemplo:
Crie a ComposedEntity que extende Entity, dentro dela você crie um atributo lá que represente sua segunda (ou mais) chave primária, ai vai de você verificar se há a necessidade de criar um controlador novo para isso
Esse é um caso que foge a regra padrão do exemplo, basta então adicionar as novas “regras de negócio”, que herda o que era pra ser utilizado e adiciona os métodos específicos, todo jeito você também terá que criar um ComposedManagedBean para saber controlar e editar essas chaves primárias.

O foco da arquitetura (mesmo sendo muito simplória) é que seja necessário criar apenas o modelo e a visão para fazer CRUD simples, as novas regras herdam as classes “genéricas” e adicionam suas especificidades. Como você pode ter mais de um entidade com chave composta, crie a classe abstrata para ela.

Agora andei lendo sobre chave composta (não costumo utilizar) e pessoal vem reclamando dela no hibernate, de uma olhada nesses comentários:


http://javafree.uol.com.br/topic-5839-Chave-composta-no-mapeamento-HIbernate.html

E desculpe pela demora em responder[/quote]

Eu tenho lido bastante sobre isso, dizem que na própria documentação do hibernate fala que não é recomendado usar. Eu vou ver se crio uma regra como alternativa, ainda mais que é somente uma tabela que precisa da “função” de chave composta.
Eu cheguei a conseguir a colocar sem criar um compositeEntity ( mas foi com @IdClass), mas na hora de gravar tava gerando uma coluna nova, e como já tinha lido sobre essas reclamações da composite, deixei de mão mesmo.

Eu estou tentando fazer agora é uma Façade para manipular dois beans para poder persistir eles ao mesmo tempo, sendo que o segundo tem dependência do primeiro para ser persistido. Criar a façade seria o ideal? Se eu conseguir gerar eu posto o código que eu avancei aqui!

[quote=Wolky]rp, tente não usar ManyToMany no hibernate, crie uma tabela auxiliar e todas serão OneToMany ou ManyToOne, tipo… Pessoa e categoria é um relacionamento N para N, crie então o pessoa_categoria, que pessoa é 1 para N no pessoa_categoria e o pessoa_categoria é 1 para N para categoria… não sei se consegui explicar direito, mas de uma pesquisada sobre.

Tente por essa validação retorno do control, toda négocio fica nele, mas o control acessar direto a visão é meio tenso, traga um retorno ou lance uma Exception que você criou para tratar esse fluxo de dados, dentro do managedBean você verifica se ele deu exceção com try catch, e se deu, vc sabe que o CPF não está ok.

Essas 2 semanas que se seguem estarei muito ocupado com meu TCC e iniciação científica, qualquer dúvida mandem por e-mail, posso até postar a resposta aqui para ajudar aos outros que tiverem mesma dúvida, a diferença é que acesso diariamente meu e-mail, já o forum não.[/quote]

Eu estava indo por essas paginas que ta bem explicadinho:
http://www.wbotelhos.com.br/2011/11/06/hibernate-relacionamento-manytomany-sem-atributos/
http://www.wbotelhos.com.br/2011/12/06/hibernate-relacionamento-manytomany-com-atributos/
http://www.wbotelhos.com.br/2012/01/17/hibernate-relacionamento-manytomany-com-atributos-e-chave-composta/

Gerar ManytoMany é ruim?
É que eu comecei na ligação mais difícil e não vi o ManyToMany funcionando ainda.

[quote=rpsouza441]

Eu tenho lido bastante sobre isso, dizem que na própria documentação do hibernate fala que não é recomendado usar. Eu vou ver se crio uma regra como alternativa, ainda mais que é somente uma tabela que precisa da “função” de chave composta.
Eu cheguei a conseguir a colocar sem criar um compositeEntity ( mas foi com @IdClass), mas na hora de gravar tava gerando uma coluna nova, e como já tinha lido sobre essas reclamações da composite, deixei de mão mesmo.

Eu estou tentando fazer agora é uma Façade para manipular dois beans para poder persistir eles ao mesmo tempo, sendo que o segundo tem dependência do primeiro para ser persistido. Criar a façade seria o ideal? Se eu conseguir gerar eu posto o código que eu avancei aqui![/quote]

Em questão da Facade, pode ser uma ideia, mas no seu caso eu axo que é melhor herdar o genericDAO e dentro do método desabilitar o autoCommit e fazer as várias operações dentro do método depois dar o commit, não sei os métodos certinhos pra isso…
Não lembro também da arquitetura do projeto porque estou evoluindo ela desde que fiz o tutorial, não sei se ela tem o GenericControl que pega mais ou menos a ideia do Facade, só que adiciona vários métodos de reflexão…

Não sei se estou fazendo algo errado aqui. Pelo que li o “isEmpty(entity)” procura a annotation RequiredField e se tiver ele verifica se o campo está vazio. Mas eu até tirei todos os required field’s do modelo e ainda assim não aceita tentar gravar no banco com valores vazios., ou seja, sempre pede para preencher todos os campos ( lançando um erro_).

A unica diferença da apostila e do meu código é na interface required field eu adicionei o import “java.lang.annotation.ElementType” pois o eclipse pediu.

Aqui o codigo do isEmpty

@SuppressWarnings("rawtypes") public boolean isEmpty(Entity entity) { clean(); boolean empty = false; Class entityClass = entity.getClass(); Field[] fields = entityClass.getDeclaredFields(); for (Field currentField : fields) { try { currentField.getAnnotation(RequiredField.class); Object fieldValue = getField(entity, currentField.getName()); if (fieldValue == null || fieldValue.equals("")) { empty = true; emptyFields.add(currentField.getName()); } } catch (Exception e) { // do nothing yet } } return empty; }

no projeto eu adicionei o primefaces mais atual e estou com um formulario do tipo wizard do primefaces, será ele que está influenciando ?
link dele: http://www.primefaces.org/showcase-labs/ui/wizard.jsf

[quote=rpsouza441]Não sei se estou fazendo algo errado aqui. Pelo que li o “isEmpty(entity)” procura a annotation RequiredField e se tiver ele verifica se o campo está vazio. Mas eu até tirei todos os required field’s do modelo e ainda assim não aceita tentar gravar no banco com valores vazios., ou seja, sempre pede para preencher todos os campos ( lançando um erro_).

A unica diferença da apostila e do meu código é na interface required field eu adicionei o import “java.lang.annotation.ElementType” pois o eclipse pediu.

Aqui o codigo do isEmpty

@SuppressWarnings("rawtypes") public boolean isEmpty(Entity entity) { clean(); boolean empty = false; Class entityClass = entity.getClass(); Field[] fields = entityClass.getDeclaredFields(); for (Field currentField : fields) { try { currentField.getAnnotation(RequiredField.class); Object fieldValue = getField(entity, currentField.getName()); if (fieldValue == null || fieldValue.equals("")) { empty = true; emptyFields.add(currentField.getName()); } } catch (Exception e) { // do nothing yet } } return empty; }

no projeto eu adicionei o primefaces mais atual e estou com um formulario do tipo wizard do primefaces, será ele que está influenciando ?
link dele: http://www.primefaces.org/showcase-labs/ui/wizard.jsf[/quote]

Você está certo, o isEmpty é um método que passa por todos os campos da Entidade procurando pela annotation RequiredField, se o campo estiver anotado com ela, ele verifica se tem valor preenchido, senão ele lança erro.
Se na sua Entidade os campos não possuem a annotation @RequiredField, o método não verifica se ele foi preenchido ou não. retornando sempre false, ou seja, não está vazio, e deve persistir no banco de dados sim.

O problema que pode estar havendo é dentro da annotation @RequiredField, é essencial que ela esteja com as annotation sobre ela falando que ela é do tipo RunTime e que será usada em Field:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)

Se mesmo assim estiver dando erro que é para preencher todos Fields, há algo errado já que ele entra no if para ver se foi preenchido o campo ou não somente se ele conseguir pegar a annotation RequiredField, ou seja, se não conseguir pegar, ele vai direto pro catch e o valor do empty vai continuar false.
Lembre que o isEmpty retorna true para se os campos estão vazio e false para se os campos com RequiredField estão preenchidos

Vlw manin… Tava mesmo precisando de um material desses para começar meus estudos!. . Ficou muito boa a apostila …

Fala ai amigão, tudo bem?

eu estou acompanhando o seu material que por sinal é ótimo, Parabéns, porém, esta dando um erro, não estou conseguindo executar o .xhtml, pode me dar uma ajudinha?

estou usando os .jar que você disponibilizou, eclipse (indigo), tomcat 7 da uma olhadinha no web.xml ve se esta tudo ok…

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		 xmlns="http://java.sun.com/xml/ns/javaee" 
		 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
		 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
		 id="WebApp_ID" version="3.0">
  <display-name>loja_Virtual</display-name>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <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>
  
   <!-- Configuração do Servlet do PrimeFces -->
  
  <servlet>
  	<servlet-name>Resource Servlet</servlet-name>
  	<servlet-class>/primefaces_resource/*</servlet-class>
  </servlet>
  
  <!-- Configuração dotemplante ou skin do primefaces -->
  
  <context-param>
  	<param-name>primefaces.THEME</param-name>
  	<param-value>redmond</param-value>
  </context-param>
  
</web-app>

[quote=alexandre.marques]Fala ai amigão, tudo bem?

eu estou acompanhando o seu material que por sinal é ótimo, Parabéns, porém, esta dando um erro, não estou conseguindo executar o .xhtml, pode me dar uma ajudinha?

estou usando os .jar que você disponibilizou, eclipse (indigo), tomcat 7 da uma olhadinha no web.xml ve se esta tudo ok…
[/quote]

Opa, vlw Alexandre, tenta adicionar o seguinte codigo no seu web.xml:

<context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param>
Se não der certo, explique melhor seu erro, onde ele ocorre, qual mensagem, que posso ajudar melhor.

Qualquer coisa estamos ai,

Então Wolk eu inclui as tag no web.xml mais o projeto não executa e o tipo de erro não é o 404…

o erro e esse:

19/04/2012 16:32:45 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_23\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\PC Connectivity Solution;C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\WINDOWS LIVE;C:\ORACLEXE\APP\ORACLE\PRODUCT\10.2.0\SERVER\BIN;C:\windows\SYSTEM32;C:\windows;C:\windows\SYSTEM32\WBEM;C:\windows\SYSTEM32\WINDOWSPOWERSHELL\V1.0;C:\PROGRAM FILES\BROADCOM\BROADCOM 802.11 NETWORK ADAPTER\DRIVER;C:\PROGRAM FILES\WINDOWS LIVE\SHARED;C:\PROGRAM FILES\WIDCOMM\BLUETOOTH SOFTWARE;C:\Program Files\INTERNET EXPLORER;C:\eclipse_J2EE_JBOSS;
19/04/2012 16:32:45 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:Loja_Virtual’ did not find a matching property.
19/04/2012 16:32:45 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-bio-8080”]
19/04/2012 16:32:45 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-bio-8009”]
19/04/2012 16:32:45 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 782 ms
19/04/2012 16:32:45 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
19/04/2012 16:32:45 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.19
19/04/2012 16:32:47 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Sun’s JavaServer Faces implementation (1.2_04-b10-p01) for context ‘/Loja_Virtual’
19/04/2012 16:32:47 com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed.
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.NoClassDefFoundError: javax/faces/component/behavior/ClientBehaviorHolder
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:1028)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:1100)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:509)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:402)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
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)
Caused by: java.lang.ClassNotFoundException: javax.faces.component.behavior.ClientBehaviorHolder
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
… 17 more
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext startInternal
GRAVE: Error listenerStart
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/Loja_Virtual] startup failed due to previous errors
19/04/2012 16:32:47 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“http-bio-8080”]
19/04/2012 16:32:47 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“ajp-bio-8009”]
19/04/2012 16:32:47 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2348 ms

A pagina .xhtml

<!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:ui="http://java.sun.com/jsf/facelets" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:f="http://java.sun.com/jsf/core">

   <h:inputText value="Jesus seja louvado!!!" />
   
</html>

o Arquivo xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         id="WebApp_ID" version="3.0">        
  <display-name>Loja_Virtual</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
   <!-- Configuração da Servlet do JSF -->
  
  <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>
  
  <!-- Configuração do Servlet do PrimeFces -->
  
  <servlet>
  	<servlet-name>Resource Servlet</servlet-name>
  	<servlet-class>/primefaces_resource/*</servlet-class>
  </servlet>
  
  <!-- Configuração dotemplante ou skin do primefaces -->
  
  <context-param>
  	<param-name>primefaces.THEME</param-name>
  	<param-value>redmond</param-value>
  </context-param>

  <context-param>  
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>  
    <param-value>.xhtml</param-value>  
</context-param>  
  
</web-app>

[quote=alexandre.marques]Então Wolk eu inclui as tag no web.xml mais o projeto não executa e o tipo de erro não é o 404…

o erro e esse:

19/04/2012 16:32:45 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_23\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\PC Connectivity Solution;C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\WINDOWS LIVE;C:\ORACLEXE\APP\ORACLE\PRODUCT\10.2.0\SERVER\BIN;C:\windows\SYSTEM32;C:\windows;C:\windows\SYSTEM32\WBEM;C:\windows\SYSTEM32\WINDOWSPOWERSHELL\V1.0;C:\PROGRAM FILES\BROADCOM\BROADCOM 802.11 NETWORK ADAPTER\DRIVER;C:\PROGRAM FILES\WINDOWS LIVE\SHARED;C:\PROGRAM FILES\WIDCOMM\BLUETOOTH SOFTWARE;C:\Program Files\INTERNET EXPLORER;C:\eclipse_J2EE_JBOSS;
19/04/2012 16:32:45 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:Loja_Virtual’ did not find a matching property.
19/04/2012 16:32:45 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-bio-8080”]
19/04/2012 16:32:45 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-bio-8009”]
19/04/2012 16:32:45 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 782 ms
19/04/2012 16:32:45 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
19/04/2012 16:32:45 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.19
19/04/2012 16:32:47 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Sun’s JavaServer Faces implementation (1.2_04-b10-p01) for context ‘/Loja_Virtual’
19/04/2012 16:32:47 com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed.
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.NoClassDefFoundError: javax/faces/component/behavior/ClientBehaviorHolder
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:1028)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:1100)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:509)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:402)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
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)
Caused by: java.lang.ClassNotFoundException: javax.faces.component.behavior.ClientBehaviorHolder
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
… 17 more
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext startInternal
GRAVE: Error listenerStart
19/04/2012 16:32:47 org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/Loja_Virtual] startup failed due to previous errors
19/04/2012 16:32:47 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“http-bio-8080”]
19/04/2012 16:32:47 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“ajp-bio-8009”]
19/04/2012 16:32:47 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2348 ms

[/quote]

Alexandre, seu erro não é no projeto ou em qualquer parte dele, seu problema é na configuração do Tomcat, ele não consegue nem encontrar o java.lang que é nativo do java, nem import a gente precisa de dar nele para usar as classes.
Nas primeiras linhas fala que não consegue encontrar os arquivos de configuração do tomcat, verifique se o seu jdk está bem especificado no JAVA_HOME e no CLASSPATH, veja se é necessário de colocar a variavel CATALINA_HOME.

Parabéns pela iniciativa.

Wolky, parabéns pela apostila !!! muito boa,

gostaria de pediar ajuda com o seguinte erro quando rodo a aplicação e chamo a pagina CadReino.jsf :
javax.servlet.ServletException: Não é possível criar instância para·a classe: br.ueg.portalVirtual.view.managed.ReinoMB.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)

[quote=wtaumaturgo]Wolky, parabéns pela apostila !!! muito boa,

gostaria de pediar ajuda com o seguinte erro quando rodo a aplicação e chamo a pagina CadReino.jsf :
javax.servlet.ServletException: Não é possível criar instância para·a classe: br.ueg.portalVirtual.view.managed.ReinoMB.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
[/quote]

Preciso de mais informações wtaumaturgo, poste o xhtml e o .java do ReinoMB, mas faça o seguinte:
Use o debug e ponha um breakpoint bem na primeira linha do construtor do reinoMB, e veja se tem alguma variável nula.
Básicamente esse erro é que o jsf não conseguiu criar instancia da classe, isso normalmente ocorre por tentar acessar alguma variável que está nula, dando exception e não tem como da new na classe.

Olá Wolky segue o código

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="../templates/template.xhtml">
	<ui:define name="title">
		<h:outputText value="#{msg.reino_title}" />
	</ui:define>
	<ui:define name="context">
		<h:form>
			<h:panelGrid columns="2">
				<p:commandButton value="#{msg.reino_add}" oncomplete="dlg.show();"
					update="formCad" />
				<p:commandButton value="#{msg.button_list}" ajax="false"
					action="#{reinoMB.list}" update="listPanel" />
				<p:inputText value="#{reinoMB.busca}" />
				<p:commandButton value="#{msg.button_search}" ajax="false"
					action="#{reinoMB.find}" />
			</h:panelGrid>
			<p:dataTable rendered="#{reinoMB.listing}"
				value="#{reinoMB.listEntity}" var="reinos" rows="5"
				emptyMessage="#{msg.reino_empty}" paginator="true">
				<p:column headerText="#{msg.reino_reinoColumn}">
					<h:outputText value="#{reinos.reino}" />
				</p:column>
				<p:column headerText="#{msg.column_edit}">
					<p:commandLink update="formCad" oncomplete="dlg.show();">
						<f:setPropertyActionListener target="#{reinoMB.entity}"
							value="#{reinos}" />
						<p:graphicImage
							value="#{pageContext.servletContext.contextPath}/images/editar.png"
							title="#{msg.column_edit}" />
					</p:commandLink>
				</p:column>
				<p:column headerText="#{msg.column_delete}">
					<p:commandLink action="#{reinoMB.delete}" ajax="false">
						<p:graphicImage
							value="#{pageContext.servletContext.contextPath}/images/lixeira.png"
							title="#{msg.column_delete}" />
						<f:setPropertyActionListener target="#{reinoMB.entity}"
							value="#{reinos}" />
					</p:commandLink>
				</p:column>
			</p:dataTable>
			<p:messages showDetail="true" showSummary="false" />
		</h:form>
		<p:dialog widgetVar="dlg" modal="true" closable="true"
			header="#{msg.reino_header}">
			<h:form id="formCad">
				<h:panelGrid columns="2">
					<h:outputText value="#{msg.reino_reino}" />
					<p:inputText value="#{reinoMB.entity.reino}" />
				</h:panelGrid>
				<p:column>
					<p:commandButton value="#{msg.button_save}"
						action="#{reinoMB.saveOrUpdate}" ajax="false" />
					<p:commandButton value="#{msg.button_cancel}" onclick="dlg.hide();"
						actionListener="#{reinoMB.cancel}" />
				</p:column>
			</h:form>
		</p:dialog>
	</ui:define>
</ui:composition>
</html>

package br.ueg.portalVirtual.view.managed;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import br.ueg.portalVirtual.model.Reino;

@ManagedBean
@SessionScoped
public class ReinoMB extends MB<Reino> {
	public ReinoMB() {
		super();
	}

	@Override
	protected void initializeEntity() {
		setEntity(new Reino());
	}
}

poem um breakpoint no construtor do MB e vê lá se da alguma exception, deve ser alguma variável nula… o código está ok
posta tb o código do MB.java, mas vc vai encontrar o erro melhor debugando, possivelmente no MB ele deve estar setando o control nulo…

package br.ueg.portalVirtual.view.managed;

import java.util.List;
import javax.faces.event.ActionEvent;
import br.ueg.portalVirtual.control.Control;
import br.ueg.portalVirtual.model.Entity;

public abstract class MB<E extends Entity> {
	
	private Control<E> control;
	private boolean listing = false;
	private E entity;
	private List<E> listEntity;
	private String busca;

	public MB() {
		control = new Control<E>();
		initializeEntity();
	}

	protected Control<E> getControl() {
		return control;
	}

	protected void setControl(Control<E> control) {
		this.control = control;
	}

	public boolean isListing() {
		return listing;
	}

	public void setListing(boolean listing) {
		this.listing = listing;
	}

	public E getEntity() {
		return entity;
	}

	public void setEntity(E entity) {
		this.entity = entity;
	}

	public List<E> getListEntity() {
		return listEntity;
	}

	public void setListEntity(List<E> listEntity) {
		this.listEntity = listEntity;
	}

	public String getBusca() {
		return busca;
	}

	public void setBusca(String busca) {
		this.busca = busca;
	}

	public void list() {
		setListing(true);
		listEntity = control.getListAll(getEntity());
	}

	public void saveOrUpdate() {
		if (entity.getId() == 0) {
			control.save(entity);
		} else {
			control.update(entity);
		}
		initializeEntity();
		verifyListing();
	}

	public void delete() {
		control.delete(entity);
		verifyListing();
	}

	public void find() {
		setListing(true);
		listEntity = control.findByCriteria(getEntity(), busca);
	}

	private void verifyListing() {
		if (listing) {
			listEntity = control.getListAll(getEntity());
		}
	}

	public void cancel(ActionEvent event) {
		initializeEntity();
	}

	protected abstract void initializeEntity();

}

package br.ueg.portalVirtual.view.managed;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import br.ueg.portalVirtual.control.Control;
import br.ueg.portalVirtual.model.Filo;
import br.ueg.portalVirtual.model.Reino;

@ManagedBean
@SessionScoped
public class FiloMB extends MB<Filo> {
	private List<Reino> reinos;
	private Control<Reino> localControl;

	public FiloMB() {
		super();
		localControl = new Control<Reino>();
	}

	@Override
	protected void initializeEntity() {
		setEntity(new Filo());
	}

	public List<Reino> getReinos() {
		return reinos;
	}

	public void setReinos(List<Reino> reinos) {
		this.reinos = reinos;
	}

	public void listReino(ActionEvent event) {
		reinos = localControl.getListAll(new Reino());
	}

}

a primeira vista, está tudo ok, manda pra mim o .war ou gera o .zip do seu workspace e manda pro meu e-mail: diego160291@msn.com
vou fazer uns testes nele

Diego Enviei o .war para seu E-mail
Meu e-mail é wesleytaumaturgo@gmail.com

[quote=wtaumaturgo]Diego Enviei o .war para seu E-mail
Meu e-mail é wesleytaumaturgo@gmail.com[/quote]

Seu problema é que o Spring não consegue criar a instancia do GenericDAO, já que você definiu que seu banco é o MySQL, mas não colocou na pasta lib o .jar do jdbc mysql, só vi o do postgresql lá, e vc tem muito jar lá… mtos não são usados…

se trocar para postgres, vai funcionar, ou vc baixa o jdbc