Escolar Documentos
Profissional Documentos
Cultura Documentos
Agradecimentos
Agradecemos ao Prof. Fbio Dias (UFC Quixad) por ter gentilmente cedido seus slides para adaptao e uso nesta disciplina.
Motivao
O desenvolvimento de aplicaes web Java demanda um grande esforo Ambientes de desenvolvimento visual, como Asp e .Net, possibilitam um desenvolvimento rpido Como unir as duas coisas?
Java Server Faces (JSF) A promessa de JSF trazer um rpido desenvolvimento de interface grfica do usurio (GUI) para o Java server-side
Introduo
A tecnologia JSF propicia ao Java server-side um desenvolvimento rpido de interfaces de usurio
Swing para aplicaes server-side Realiza o trabalho braal que os desenvolvedores de JSP precisam fazer mo A idia focar na lgica da aplicao
JSF facilita o desenvolvimento de aplicaes web atravs do suporte componentes de interface com o usurio ricos e poderosos
Campos de texto, listas, abas, grids
Composio e Arquitetura
O JSF composto dos seguintes elementos:
Pginas XHTML; Backing-Beans (Managed-Bean); Faces-Servlet; faces-conf.xml; TagLibraries do JSF.
Arquitetura em Camadas
Composio e Arquitetura
Pginas XHTML: Agem como view (viso), com o uso das TagLibs do JSF.
Facelets: tecnologia de template de viso padro do JSF.
Backing-Beans(Managed-Bean): Agem como controle de pginas, ou seja, gerenciam eventos, comportamentos e validaes dos componentes da pgina XHTML. Faces-Servlet: o servlet controlador do Framework JSF, o qual delega aes para o Backing-Bean especfico.
faces-conf.xml: Arquivo de configurao, navegabilidade e backing-beans (Managed-Bean). TagLibraries: Tags que do vida aos componentes do JSF.
Facelets
Framework de templates para JSF. Mais usado, popular, com maior suporte da comunidade, maior documentao e estabilidade. Vantagens: Facilidade na criao e reutilizao de pginas e componentes. Melhor depurao de erros. AJAX nativo. Melhor compatibilidade entre XHTML, JSTL e os componentes. Independente de Web Container. 30 a 50% mais rpido que JSP. Manipulador de viso padro do JSF 2.0.
Implementaes de JSF
Mojarra (Sun/ Oracle) mais usada e recomendada implementao de referncia Myfaces (Apache) ADF Faces (Oracle) BEA (embutida no WebLogic) IBM (embutida no WebSphere) Backbase NetAdvantage
Managed Bean
apenas um POJO e deveria ser o mais simples possvel. Os componentes atravs de EL acessam os valores dos managed beans atraves de getters / setters.
Instalao
Mojarra
http://javaserverfaces.java.net/ Biblioteca necessria:
javax.faces-2.1.22.jar
<?xml version='1.0' encoding='${encoding}' ?> <!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"> <h:head> <title>Page title</title> </h:head> <h:body> Contents </h:body>
2. Adicionar declaraes de objetos de controller (Managed Beans) ao arquivo de configurao da aplicao (faces-config.xml) ou atravs de anotaes no prprio Managed Bean.
3. Criar pginas utilizando componentes UI e core tags. 4. Definir a navegao de pginas no arquivo faces-config.xml.
Hello World
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Hello JSF</title> </h:head> <h:body> Hello World com JSF </h:body> </html>
Formulrio simples
<html xmlns=http://www.w3.org/1999/xhtml xmlns:h="http://java.sun.com/jsf/html"> <h:body> <h:form> Marca: <h:inputText /> </h:form> </h:body> </html>
Exemplo 3 - Soma
Soma soma.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"> <h:head><title>Soma</title></h:head> <h:body> <h:form> <h1>Soma</h1> <h:messages /> <h:panelGrid columns="2"> <h:outputLabel value="Nmero 1:" for="n1" /> <h:inputText id="n1" label="Nmero 1" value="#{somaBean.n1}" required="true" /> <h:outputLabel value="Nmero 2:" for="n2" /> <h:inputText id="n2" label="Nmero 2" value="#{somaBean.n2}" required="true" /> <h:commandButton action="#{somaBean.somar}" value="Somar" /> </h:panelGrid> </h:form> <p>A soma #{somaBean.resultado}</p> </h:body> </html>
Para isso, deve-se definir a propriedade action do commandButton para executar tal mtodo (ao invs de apontar diretamente para um nome lgico).
No bean, o mtodo deve retornar uma String que representa o nome lgico da pgina de destino.
Exemplo 4 - Login
Login
public class Login { private String usuario, senha;
public String getUsuario() { return usuario; } public void setUsuario(String usuario) { this.usuario = usuario; }
Login login.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"> <h:head><title>Login</title></h:head> <h:body> <h1>Login</h1> <h:messages /> <h:form> <h:panelGrid columns="2"> <h:outputLabel value="Usurio:" for="usuario" /> <h:inputText id="usuario" label="Usurio" value="#{loginBean.login.usuario}" required="true" /> <h:outputLabel value="Senha:" for="senha" /> <h:inputText id="senha" label="Senha" value="#{loginBean.login.senha}" required="true" /> <h:commandButton action="#{loginBean.logar}" value="Enviar" /> </h:panelGrid> </h:form> </h:body> </html>
Exerccios
1) Faa o exerccio anterior para efetuar a verificao de usurio e senha como o visualizado nos slides
Caso o usurio consiga logar, mostre a pgina de saudao Caso contrrio, mostre uma pgina de erro
Forward x Redirect
Forward
executado internamente pelo servlet (controller). O browser no sabe o que est ocorrendo durante o processamento no servidor, ou seja, no sabe por quais servlets ou pginas a requisio est passando. No final do processamento da requisio a url da barra de endereos do browser no muda. O reload da pgina resultante ir executar a requisio original.
Perigo: resubmisso de formulrio
Forward x Redirect
Forward
executado internamente pelo servlet (controller). O browser no sabe o que est ocorrendo durante o processamento no servidor, ou seja, no sabe por quais servlets ou pginas a requisio est passando. No final do processamento da requisio a url da barra de endereos do browser no muda. O reload da pgina resultante ir executar a requisio original.
Perigo: resubmisso de formulrio
Forward x Redirect
Redirect
um processo de dois passos, ao receber uma requisio a aplicao web pede ao browser para acessar uma segunda url, por isso a url muda. O reload de pgina no repetir a requisio original, mas sim a nova url (2 requisio). um processo muito mais lento que um forward, pois so necessrias duas requisies. Objetos colocados no escopo do request original so perdidos durante o segundo request.
Forward x Redirect
Forward mantm os atributos e parmetros do request original, j um redirect no. Um dos motivos para se utilizar um redirect para evitar que no reload/refresh da pgina ocorra uma resubmisso do form, evitando-se assim resultados inesperados na aplicao.
Referncias
O que todo bom desenvolvedor JSF deveria saber
http://www.rponte.com.br/2009/01/19/o-quetodo-bom-desenvolvedor-jsf-deveria-saber/