Olá, tudo bem?
Nesse post comemorativo de 100.000 visitas será descrita uma aplicação web completa. O post de hoje utilizará as seguintes tecnologias: Tomcat7, JSF 2 (Facelets e Libraries) com Primefaces (utilizando AutoComplete), JPA / Hibernate (com relacionamento NxN), Login por Filter.
Caso você queira ver uma aplicação completa utilizando JSF + EJB + JPA + JAAS + JBoss 7 clique aqui.
Para o projeto de hoje você precisará dos artefatos abaixo (todos os JARs você encontra com o código fonte disponível na última página):
O banco utilizado foi o Postgres, mas você pode utilizar qualquer um. Basta alterar o driver e a url de conexão do arquivo persistence.xml.
Ao final desse post você irá encontrar o código fonte juntamente com as bibliotecas utilizadas no projeto.
O que será visto em cada página:
- Página 02: Modelo mapeado com anotações JPA. Utilização do relacionamento NxN (@ManyToMany) , NamedQueries utilizando Join Fetch e Enum como atributo.
- Página 03: DAO Genérico, controle de transação, utilizar métodos genéricos que preencham os parâmetros de uma query.
- Página 04: Façades utilizando transações, utilizar método findReferenceOnly, cuidados ao utilizar o comando entityManager.merge().
- Página 05: Filters.
- Página 06: ManagedBeans. Injetar um ManagedBean dentro de outro, observações sobre @ViewScoped.
- Página 07: JSFMessageUtil.
- Página 08: Arquivos de configurações: log4j.properties, messages.properties.
- Página 09: xhtml pages, Facelets.
- Página 10: Primefaces AutoComplete, JSF Converter utilizando “forClass”.
- Página 11: Facilitando o uso de CSS/javascript/imagens com JSF.
- Página 12: Configurações “web.xml”.
- Página 13: Práticas para um programa mais seguro.
- Página 14: Executando a aplicação
A aplicação de hoje terá um cadastro de pessoas e cachorros onde apenas o ADMIN poderá cadastrar os cachorros. Antes de executar o projeto crie o banco de dados: “JSFCrudDB”.


Hebert, no caso, seu eu nao quiser definir um Converter para cada class, de puder fazer um converter Generico, e definir no AutoComplete, neh?
Mas no meu ex, esta acontecendo o seguinte
GRAVE: java.lang.ClassCastException: MeuEntity cannot be cast to java.lang.String
Tem ideia do que acontece?
Felipe, boa noite.
Parece que o retorno do seu converter está errado (o que recebe String e return um Object). [=
Infelizemente não tenho como analizar códigos agora, coloque no GUJ que se eu não ajudar, alguém o fará.
Até mais. \o_
Pingback: 1389 Ideias para aplicativos Android – GUJ | S60Aplicativos
Cara, muito bom o projeto, e o tutorial!
Parabéns pelo ótimo trabalho!
Abraços!
Fico feliz por ter ajudado.
Olá Hebert, Excelente post!!!
Eu segui todos os passos mas obtive o seguinte erro após passar pela tela de login
javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: Could not initialize class com.dao.UserDAO
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:68)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.dao.UserDAO
at com.facade.UserFacade.(UserFacade.java:7)
at com.mb.LoginMB.login(LoginMB.java:38)
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:601)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
… 27 more
Tem idéia di que possa ser?
Desde já muito obrigado pela atenção
———————————–
Consegui resolver. O Problema era no persistence.xml, tinha colocado o nome da base errado. Quem quiser dar uma conferida a aplicação está disponível em:
http://54.232.193.142/JSFCrudApp
Vlw
Fico feliz por você ter conseguido. =D
Olá Hebert!! Teria como manda um link de como criar o projeto desde o início, configurando e etc?
Augusto, boa noite.
Esse post que você comentou mostra isso.
Na última página você encontra o código para download.
Até mais.
Já resolvi o problema, muito obrigado.
Eu que agradeço a visita! =D