Aos que chegaram agora, para saberem como chegar até aqui, é só ver os os outros posts do blog que abordam o tema. Lembrando que a IDE usada é o eclipse. Para ver os posts anteriores, pode clicar aqui.
O PrimeFaces é uma implementação do JSF que vem aumentando de popularidade, comparando-a com os concorrentes mais famosos (RicheFaces, IceFaces). Essa evolução pode ser notada nesse gráfico do Google Trends. O showcase é bastante completo, a documentação é abrangente, tem fórum ativo, possui uma implementação para dispositivos móveis baseado no framework jQuery Mobile, vários temas disponíveis para utilização. Também é possível ver o showcase do PrimeFaces no próprio GAE.
Vamos ao que interessa , como colocar no ar a aplicação com o Primefaces!
Primeiro, faça o download do jar e coloque ele na pasta lib do projeto(projeto/war/WEB-INF/lib). A versão utilizada no tutorial será versão 2.2.1. Para funcionar, o PrimeFaces só precisa que as libs JSF estejam no projeto (jsf-api e jsf-impl), que já estão na pasta lib.
Feito isso, para testar o funcionamento do primefaces, altere o arquivo login.xhtml. Veja um exemplo de como fica o arquivo.
<!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"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JSF 2 + PrimeFaces</title>
</h:head>
<h:body>
<f:view contentType="text/html">
<h:form>
<p:messages />
<p:accordionPanel autoHeight="false">
<p:tab title="Login no JSF">
<h:panelGrid columns="2">
<h:outputText value="E-mail:" />
<h:inputText value="#{loginMB.mail}" required="true"
requiredMessage="Preenchimento do e-mail obrigatório" />
<h:outputText value="Senha:" />
<h:inputSecret value="#{loginMB.senha}" required="true"
requiredMessage="A senha não deve ser vazia" />
<p:commandButton value="Ok - Primefaces"
actionListener="#{loginMB.autenticar}" ajax="false" />
</h:panelGrid>
</p:tab>
</p:accordionPanel>
</h:form>
</f:view>
</h:body>
</html>
"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"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JSF 2 + PrimeFaces</title>
</h:head>
<h:body>
<f:view contentType="text/html">
<h:form>
<p:messages />
<p:accordionPanel autoHeight="false">
<p:tab title="Login no JSF">
<h:panelGrid columns="2">
<h:outputText value="E-mail:" />
<h:inputText value="#{loginMB.mail}" required="true"
requiredMessage="Preenchimento do e-mail obrigatório" />
<h:outputText value="Senha:" />
<h:inputSecret value="#{loginMB.senha}" required="true"
requiredMessage="A senha não deve ser vazia" />
<p:commandButton value="Ok - Primefaces"
actionListener="#{loginMB.autenticar}" ajax="false" />
</h:panelGrid>
</p:tab>
</p:accordionPanel>
</h:form>
</f:view>
</h:body>
</html>
Veja algumas telas do PrimeFaces funcionando.
O projeto de exemplo também pode ser visto rodando no GAE nesse link.
Por hoje é só, mas em breve mais algumas coisas sobre o PrimeFaces, JSF 2 e etc.
Peguei o exemplo do site que você tinha falado, incluir o jar do PRIMEFACES, mas quando acesso a tela de login, aparece esse erro:
ResponderExcluirAté no site de exemplo não esta funcionando direito, não está redirecionando.
08/11/2011 06:07:31 com.google.apphosting.utils.jetty.JettyLogger info
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
08/11/2011 06:07:31 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed C:\Users\Roosevelt\workspace\Repensa\war\WEB-INF/appengine-web.xml
08/11/2011 06:07:31 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed C:\Users\Roosevelt\workspace\Repensa\war\WEB-INF/web.xml
08/11/2011 02:07:38 com.google.appengine.tools.development.DevAppServerImpl start
INFO: The server is running at http://localhost:8888/
08/11/2011 02:07:50 com.google.apphosting.utils.jetty.JettyLogger warn
AVISO: /favicon.ico/
java.lang.IllegalArgumentException: null source
at java.util.EventObject.(Unknown Source)
at javax.faces.event.SystemEvent.(SystemEvent.java:67)
at javax.faces.event.ComponentSystemEvent.(ComponentSystemEvent.java:69)
at javax.faces.event.PostRestoreStateEvent.(PostRestoreStateEvent.java:69)
at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
Continuação:
ResponderExcluirat com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward(StaticFileUtils.java:80)
at com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile(LocalResourceFileServlet.java:247)
at com.google.appengine.tools.development.LocalResourceFileServlet.doGet(LocalResourceFileServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Está ocorrendo este erro, fiz conforme o site, mesmos exemplos, o exemplo do site tb não funciona corretamente:
ResponderExcluirINFO: The server is running at http://localhost:8888/
08/11/2011 02:07:50 com.google.apphosting.utils.jetty.JettyLogger warn
AVISO: /favicon.ico/
java.lang.IllegalArgumentException: null source
at java.util.EventObject.(Unknown Source)
at javax.faces.event.SystemEvent.(SystemEvent.java:67)
at javax.faces.event.ComponentSystemEvent.(ComponentSystemEvent.java:69)
at javax.faces.event.PostRestoreStateEvent.(PostRestoreStateEvent.java:69)
at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
teste notificacao
ResponderExcluir