webcast portlets-jsf
DESCRIPTION
Desenvolvendo portlets utilizando jsf, facelets, ajax e richfacesTRANSCRIPT
Desenvolvendo Desenvolvendo Portlets utilizando Portlets utilizando
JSF, Ajax, RichfacesJSF, Ajax, RichfacesGustavo Lira
Consultor – [email protected]
Desenvolvendo Portlets utilizando JSF, Ajax, Richfaces
● O que será apresentado é uma continuação do WebCast “Escrevendo meu primeiro portlet”, cujo audio e slides podem ser baixados através do link http://www.4linux.com.br/podcasts/podcast-download-escrevendo-meu-primeiro-portlet.html
JSF Portlet Bridge
● Permite usar um framework criado para um ambiente
de Servlets dentro de um Container de Portlets
● JSR-301 (JSF 1.2 x Portlet 1.0)
● JSR-329 (JSF 1.2 x Portlet 2.0)
● RIs no projeto Apache MyFaces, porém compatíveis com
outras implementações do JSF
Bridge x Servidor de Aplicação
● Os JARs do Portlet Bridge devem ser inclusos na
aplicação ou copiados para o diretório de bibliotecas do
servidor
● Alguns servidores já possuem as bibliotecas do JSF e do
JSTL
● Cuidado com as dependências, ex: Jakarta Commons
Projeto JSF Tradicional x Portlets
● Arquivos JAR do Portlet Bridge
● portlet.xml referencia o GenericFacesPortlet fornecido
pelo Bridge
● Configure views padrões para View (obrigatória), Edit e
Help
● Você poderá continuar usando o taglib de portlets
● Algumas extensões do JSF podem não ser compatíveis
com o Portlet Bridge!
portlet.xml
<portlet> <description>Hora Mundial JSF</description> <portlet-name>hora-mundo-jsf</portlet-name> <display-name>Hora Mundial JSF</display-name> <portlet-class> javax.portlet.faces.GenericFacesPortlet</portlet-class>
<init-param> <name>javax.portlet.faces.defaultViewId.view</name> <value>/view.faces</value> </init-param> <init-param> <name>javax.portlet.faces.defaultViewId.help</name> <value>/help.faces</value> </init-param> <init-param> <name>javax.portlet.faces.defaultViewId.edit</name> <value>/edit.faces</value> </init-param>
Como Funciona?
● O Portlet Bridge quebra o ciclo de processamento do JSF
nas fases action e render do portlet
● Como o JSF sempre faz POST, todas as requisições
serão actions (seguidas por renders)
● O portlet bridge não é um portlet!
● Ele é apenas um intermediador entre o JSF e o
container de portlets
Como funciona?
Namespaces x JSF
● Espera-se que a implementação do JSF utilize o
getPortletNamespace() sempre que necessário no
código Javascript e CSS gerado pelo render kit
● Componentes extras podem não ter esta inteligência, e
serem incompatíveis com o ambiente de Portlet
JBoss Portlet Bridge
● É uma implementação da JSR-329 que utiliza a API 2.0
de portlets e JSF, com melhorias adicionadas ao suporte
a outros frameworks web (RichFaces e JBoss Seam)
● Neste momento, o JBoss Portlet Bridge é suportado
apenas para o GateIn, JBoss Portal ou eXo Platform
Web.xml
...
<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>
<!-- Cria-se dependência com o facelets-->
<context-param>
<param-name>javax.portlet.faces.RENDER_POLICY</param-name>
<param-value>ALWAYS_DELEGATE</param-value>
</context-param>
<!-- continua... -->
web.xml
<!-- ...continuação -->
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<!-- continua... -->
web.xml
<!-- ...continuação →
<!-- Pode-se usar xhtml ou jsp normalmente -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<!-- Pode-se usar outras configurações opcionais --->
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
</web-app>
faces-config.xml
cadastraTarefas.xhtml
cadastraTarefas.xhtml
listaTarefas.xhtml
listaTarefas.xhtml