SlideShare uma empresa Scribd logo
JSFIntrodução
IntroduçãoDesenvolvimento WebAplicações web tornam-se mais e mais importantes Mais e mais complexas:Ajax, validação (server vs. client), efeitos... Exigência mais elevada do cliente durante os anos Interfaces ricas (fáceis de usar) Prazos cada vez mais curtos Desenvolvimento considerado difícil
IntroduçãoSurgiram diversos frameworks MVC:Apache StrutsWebWork (Struts2) Spring MVC TapestryJbossSeamE muito outros.. continuam surgindo mais
IntroduçãoProblemas Java não nos fornece o bastante para 	desenvolvermos aplicações web com produtividade Dificuldade para integrar vários frameworks (algumas 	vezes nem é possível) Falta de padrão para um framework web Ausência de uma API padrão para construir 	componentes web java  
IntroduçãoUm pouco da história HTMLServletsJSP 
IntroduçãoHTMLEstático, simplesNão tem conexão com Base De DadosÓtimo para criar Home PagesOlaMundo.html<html>	<head>  		 <title>Olá Mundo</title> 	</head> 	<body>   		Olá Mundo. 	</body> </html> 
IntroduçãoServlets É uma extensão de servidoresDisponibiliza uma interface para o servidorRecursos Dinâmicos para webInterage com os clientesNecessita de um Servlet Container (Ex: Tomcat) 
IntroduçãoServlets import java.io.*;import javax.servlet.*;  import javax.servlet.http.*;  public class HelloWorldServlet extends HttpServlet {    public void doGet(HttpServletRequest request,  HttpServletResponse response)throws ServletException, IOException {      response.setContentType("text/html");      PrintWriter out = response.getWriter();      out.println("<html><body>Olá Mundo</body></html>");      out.close();    }  }
IntroduçãoJava Server Pages – JSP O JSP foi desenvolvido APENAS para mostrar resultados, o SERVLET deveria fazer a ponte com o banco de dados e fazer as regras de negócioFacilitar a criação de HTMLScriplets:  colocar código Java no JSP ;-(
IntroduçãoOlaMundo.jsp<html>	<body>	<% String mensagem = "Olá Mundo!";      	out.println(mensagem); %>	<br> 	Muito mais simples de editar o html e muito maiscomplicado de editar o codigo Java	<br></body></html>
IntroduçãoFrameworksFrameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando as exigências do software do que com detalhes de baixo nível do sistemaNão reinventar a roda
IntroduçãoStruts Framework: Action Based MVC para construções de aplicações WEBCada solicitação HTTP tem que ser respondida com uma resposta HTTPO .do  é mapeado no arquivo struts-config.xmlO  ActionServlet  define o  Action  correspondente para a solicitação
IntroduçãoStruts Framework: Action Based O  ActionServlet coloca a entrada em um JavaBean , estes JavaBeans são definidos como FormBeansO Action pode acessar o FormBean efetuar qualquer operação e armazenar o resultado em um ResultBeanO Action interage com a camada de negócio onde uma base de dados poderá ser atualizada
IntroduçãoStruts Framework: Action Based 
IntroduçãoFramework: Component BasedRápido aprendizadoBaseado em ComponentesDeixa o programador despreocupado com a parte visualProgramação Web como DesktopSimplicidadeAgilidade
IntroduçãoFrameworks Web Component BasedJava Server FacesJBossSeamWicket
JSF - IntroduçãoJavaServer Faces é...Uma especificação ?Um framework baseado em componentes  ?Interface com o usuário ?Um framework dirigido a eventos ?Padrão de mercado ?RAD ?Um framework MVC ?
JSF - IntroduçãoJavaServer Faces é... Uma especificação JSR 127 (JSF 1.0 e JSF 1.1) – 2004        JSF 1.0 – não alcançou o sucesso esperado 		JSF 1.1 – corrigiu os erros da versão anterior 	 JSR 252 (JSF 1.2) - 2006 (Java EE 5.0) 		JSF 1.2 – melhor compatibilidade com JSP 2.1 e correção de 		bugs
JSF - IntroduçãoJavaServer Faces é...  •   JSR 314 (JSF 2.0)           • Arquitetura, produtividade, ferramentas RAD, AJAX, melhores             componentes UI..           • Em desenvolvimento, porém estão planejando deixar bem 	integrado e intuitivo.
JSF - IntroduçãoJavaServer Faces é... ... um framework baseado em componentes de interface com o usuário JSF é construído sob o conceito de componentes Os componentes são a base para a construção da interface 	com o usuário Existem componentes padrões equivalentes a quase todas      as tags HTML e diversos componentes auxiliares
JSF - IntroduçãoJavaServer Faces é... Existem diversas bibliotecas de componentes disponíveis      comerciais e open source Os componentes são expressos através de tags em um JSP e posteriormente transformados em HTML
JSF - Introdução... um framework dirigido a eventos Possui um modelo para manipulação de eventos Componentes geram determinados eventos Faz chamada à um método (ação no servidor) O estado da aplicação web muda devido ao evento disparado pelo usuário Um evento pode ser um click em um botão, focar sobre um input ou mesmo alterar o valor de uma combo-box
JSF - Introdução... padrão de mercado É uma especificação (JCP) Java EE 5.0 Suporte de Big Players 	Sun, Apache, IBM, Oracle, BEA Systems, Borland, ... IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...) Implementações (Sun (R.I), Apache, IBM, ...) Conjuntos de componentes (ADF Faces, Apache MyFaces, WoodStock, IceFaces, JBoss RichFaces, ...)
JSF - Introdução.. RAD (Rapid Application Development) 4 camadas: 	Arquitetura de componentes básica 	Conjunto de componentes padrão 	Infra-estrutura da aplicação 	Ferramenta RAD
JSF - Introdução.. RAD (Rapid Application Development) JSF padroniza os primeiros três pontos e permite a criação  de ferramentas RAD Utiliza-se IDEs drag-and-drop para construir aplicações Sun Studio Creator, NetBeans, Jdeveloper,Eclipse etc
JSF - Introdução... um framework MVC para construir interfaces com o usuário para aplicações web. JSF inclui: Um conjunto de APIs para: representar os componentes UI e gerenciar o estado destes componentes manipular os eventos e validação de entrada do usuário definir e controlar a navegação entre as páginas dar suporte a internacionalização e acessibilidade
JSF - IntroduçãoResumoÉ mais do que um framework, é uma especificação baseada em MVCSuporte à internacionalizaçãoFacilita criação de telasFacilita a transferência dos dados entre telas e camadas de negócio através da ELFacilidade para criação de componentes
JSF - IntroduçãoResumoProdutividade para conversores recebidos do formulário para os tipos nas classesFlexibilidade para renderizaçãoCriar modelos simples de eventos entre interfaces gráficas e as classes no servidorMecanismos produtivos para validação de campos na tela
JSF - IntroduçãoPor que usar JSF? É um padrão de mercado Presente na especificação JEE5.0 e em breve JEE6.0 Suporte de Big Players Fácil de usar e produtivo Fornece separação de funções que envolvem a construção de aplicações Web
JSFPor que usar JSF? Alta abstração para desenvolvimento de aplicação web Modelo de programação dirigido a eventos (oposto ao modelo HTTP request/response) Baixa curva de aprendizagem da equipe Vários pontos de extensão (converters, validators, listeners etc) Componentes já prontos!
JSFPor que usar JSF? Reusabilidade e estrutura de componentes extensível Acessibilidade (browsers, celulares, pda’s, ...) Segurança OWASP (Open Web Application Security Project) cross-site scripting, session hijacking, execução de métodos, ... Natureza orientada a componentes, validação e pontos de extensão
JSFPor que usar JSF? Grande atividade da comunidade em fóruns, listas de 	discussão, blogs, portais, revistas, livros etc Integração com diversos frameworks:	Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA, JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets, Sitemesh, DWR, EXT, Crank, Beehive-Webflow, GWT, Portlets e muitos outros
JSFPor que usar JSF? Testes unitários Shaletesting framework Templates Tiles e Sitemesh Facelets
JSFPor que usar JSF? IDEs e WYSIWYG (What you see is what you get) Eclipse (MyEclipse, Europa, Ganymed), IntelliJ IDEA, Jbuilder, NetBeans (Visual WebPack) , IBM Rational App/Web Sun Java Studio Creator , Oracle Jdeveloper,                  Red Hat Developer Studio (antigo Exadel Studio)  e JSFToolbox (Dreamweaver)
JSFPor que usar JSF? Grande variedade de componentes comerciais e open- source disponíveis Myfaces Tomahawk        Backbase Myfaces Sandbox           Simplica (ECruiser Suite) Myfaces Tobago             QuipuKit  Myfaces Trinidad       Blueprints
JSFPor que usar JSF? Myfaces Orchestra       RCFaces ADF Faces                   Jenia4Faces IceFaces                      ZK WoodStock                  G4JSF (GWT API)JBoss RichFaces         Dynamic Faces JBoss Ajax4jsf             Crank
JSFConceitos chaves do JSF Componentes Renderers Managed-beans Converters / Validators Navegação Eventos Ciclo de vida (Request Lifecycle)
JSFComponentesSepara a lógica de negócio da apresentação Cada view é composta por uma hierarquia de componentes Componentes podem ser adicionados na view 	programaticamente ou via template (JSP por default, ou 	Facelets para melhor desempenho e fácil desenvolvimento)
JSFComponentes são expressos em tags em uma página JSP  e em sua maioria são de interface com o usuário Os componentes padrões são divididos em dois grupos: Faces Core <f:view>, <f:loadBundle>, <f:param> 	HTML wrappers <h:dataTable>, <h:selectOneMenu> 	Componente = class + [renderer] + tag handler (JSP)
JSFRenderers Responsável por exibir o componente no cliente São agrupados em render kits Render kit padrão é o HTML, mas podemos ter WML, SVG etc. Efetua o encode (gera HTML do componente) Efetua o decode (seta o componente com os dados da URL query string e do formulário)
JSFExemplo:<h:inputText id=“login” size=“16” /> <input type=“text” id=“myForm:login” 	name=“myForm:login” size=“16” />
JSFRenderes:
JSFManaged beans POJO – Plain Old Java Objects
JSFManaged beans Podem ser definidos nos escopos de:Application, Session, Request e NoneÉ uma classe que envia objetos de negócio para camada de apresentaçãoSão registrados no faces-config.xml
JSFManaged beans Objetos que sofrerão alterações em seus atributos durante uma requisição, assim como seus métodos podem ser chamados a partir de um commandSão como as Actions do Struts, porém os form beans são injetados por setters dentro do seu próprio beanOs ManagedBeans serão usados na EL das páginas
JSFManaged beans
JSFObtendo o Managed beans nos escopos:Request:User user = (User)FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("user");SessionUser user = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");Inserindo o Managed beans nos escopos:Request:FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("user", (User)users.getRowData());SessionFacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", (User)users.getRowData());
JSFJSF Value Binding “Binda” valor do componente ao managed-bean O binding ocorre através de JSF Expression Language (EL) Semelhante a JSTL, porém usa-se ‘#{}’ no lugar de ‘${}’ Pode-se executar métodos no modelo através de expressões Não é processada imediatamente como na JSTL A partir da JSF 1.2 utiliza-se a Unified Expression Language (JSP  2.1) que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL 	<h:outputText value="#{pessoa.nome}"/>
JSFJSF Value Binding
JSFJSF Value Binding
JSFConverters Tem por finalidade converter e/ou formatar 	objetos do tipo Java para String e vice-versa Converters são bi-direcionais Managed-bean faz: getAsObject() JSP faz: getAsString()
JSFConverters JSF já fornece converters padrões para date / time, numbers etc Você pode implementar seu próprio converter:Basta implementar a interface javax.faces.convert.ConverterRegistrar o converter no faces-config.xml O converter pode atuar de forma explícita(id) ou implícita(class) de acordo com a sua configuração no faces-config.xml
JSFConverters javax.faces.convert.ConverterConverter é registrado dentro faces-config.xml
JSFConverter para que toda propriedade do tipo org.com.model.CPF dequalquer bean use este converter <converter> 	<converter-for-class> 		org.com.model.CPF 	</converter-for-class> 	<converter-class> 		org.com.faces.CPFConverter 	</converter-class> </converter>
JSFConverter declarado explicitamente:<h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> 	<f:converter converterId=“br.com.CPFConverter“ /> </h:inputText> Ou implicitamente (converter mapeado para objetos do tipo CPF) <h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> NADA AQUI ;-)</h:inputText>
JSFConverter Padrões do JSF:<h:inputText id="age" value="#{UserRegistration.user.age}"> <f:converter id="javax.faces.Short"/> </h:inputText>
JSFValidatores Tem por responsabilidade garantir que o valor 	informado pelo usuário seja válido Validador trabalha com objetos, não somente com Strings JSF já fornece validadores padrões como required, length, range etc
JSFVocê pode implementar seu próprio validador Basta implementar a interface javax.faces.validator.ValidatorRegistrar o validador no faces-config.xml Você pode associar um ou mais validadores aum 	componente
JSFjavax.faces.validator.ValidatorValidadores são registrados no faces-config.xml <validator>  <validator-id>br.com.validaCPF</validator-id>  <validator-class>faces.validaCPF </validator-class></validator>
JSFValidação de obrigatoriedade e comprimento do campo:<h:inputText id=“firstName“ value="#{user.firstName}“ required=“true”><f:validateLength  minimum="2“ maximum="25“ /> </h:inputText>
JSFNavegaçãoNavegação de uma página para outra Simples e poderoso sistema de navegação O framework seleciona a próxima view baseado: Na view anterior Resultado(outcome) de uma action EL de ação (ex.: #{mBean.user.save}) Qualquer combinação acimaPermite wildcard (‘*’) para páginas de origem (from-view-id)
JSFNavegação
JSFNavegação
JSFEventosComponentes geram determinados eventos 	que por sua vez disparam ações no servidor (método(s) no managed-bean ou listeners) Você também pode implementar listeners de ação 	associados a outros componentes do formulário Os listeners mais comuns do JSF são ActionListener ValueChangeListener
JSFAction event para navegação :<h:commandButton action=“listar” value=“Listar” /> Action event que executa método no managed-bean <h:commandLink action=“#{cadastroBean.cadastrar}” value=“Cadastrar” /> Método no managed-bean public String cadastrar() { // processa evento return “listar”; // retorna para view “listar” }
JSFValue-change event que executa método após alterar ovalor do componente <h:selectOneMenu id=“UF” value=“#{cadastroBean.uf}” valueChangeListener=“#{cadastroBean.carregaCidades}” onchange=“submit();”> 	<f:selectItems value=“#{cadastroBean.ufList}” /> </h:selectOneMenu>
JSFMétodo no managed-bean public void carregaCidades(ValueChangeEvent event) { 	// processa evento 	String uf = event.getNewValue(); // obtém novo valor 	this.cidadesList = Servico.carregaCidades(uf); 	// processa evento }
JSFJSF Request Lifecycle
JSF (Fases)São Atendidas pelo Reader Response e Restore Component TreeRestore Component Tree: O conjunto de componentes JSF é criado ou restaurado dependento da requisição (Primeira ou demais vezes executadas) 
JSF (Fases)Apply request Values: Os componentes irão extrair seu novo valor dos parâmetros da Request, colocando-os em variáveis de estado no servidor
JSF (Fases)Process Validations: todos os validadores serão executados, em caso de erro de qualquer valor, a mensagem é alocada no FacesContext, caso contrário ele atualiza (Update Model Values) os valores dos inputs na camada de negócio através da EL 
JSF (Fases)Invoke Application: Os métodos do ManagedBeans são executados e as regras de navegação (Gravar, Excluir, Alterar,...) são resolvidas.	Se tudo ocorrer bem é renderizada pelo container do JSP, caso contrário as mensagens gravadas no FacesContext são apresentadas 
JSF (Fases)Caso queira pular as fazer de validação e conversão, basta utilizar o parametro immediate=true<h:commandButton action=“proximo" value=“Proximo" immediate="true"/> 
JSFJSF Extension Points Customizar componentes Phase listeners (antes, depois de qualquer fase) Customizar converters / validators Customizar renderers Customizar ActionListenerImpl para manipular 	eventos Decorar ou substituir view handler, navigation 	handler, state manager etc
JSFfaces-config.xmlArquivo XML para configurar recursos da aplicação Contém regras de navegação, customização e extensão de converters, validators, componentes etc Geralmente está localizado dentro de /WEB-INF/faces-config.xml Pode ser dividido em diretórios e sub-diretórios ou dentro de arquivos jar Seta javax.faces.application.CONFIG_FILES no web.xml Ou então coloca-se META-INF/faces-config.xml dentro de um jar
JSFfaces-config.xml (Resumo)<faces-config ... > <converter> 	<converter-id>core.faces.CnpfCnpjConverter</converter-id> 	<converter-class>converter.CnpfCnpjConverter</converter-class> </converter>
JSFfaces-config.xml (Resumo)<managed-bean> 	<managed-bean-name>reportBean</managed-bean-name> 	<managed-bean-class>bean.ReportBean</managed-bean-class> 	<managed-bean-scope>request</managed-bean-scope> </managed-bean>
JSFfaces-config.xml (Resumo)<navigation-rule> 	<from-view-id>/jsp/deposito/tiporeq/searchList.jsp</from-view-id> 	<navigation-case> 		<from-outcome>deposito.tiporeq.update</from-outcome> 		<to-view-id>/jsp/deposito/tiporeq/update.jsp</to-view-id> 	</navigation-case> </navigation-rule>
Componentes JSF (Form)<h:form id="jsftags"> ...</h:form><form id="jsftags" method="post"    action="/jsftags/faces/pages/tags.jsp"    enctype="application/x-www-form-urlencoded">    ...   <input type="hidden" name="jsftags"    value="jsftags" />   <input type="hidden" name="jsftags:link" /></form>
Componentes JSF (commandButton)<h:commandButton   id="submit"   value="#{msg.buttonHeader}"   action="nextPage"></h:commandButton><input      id="_id0:submit"      type="submit"      name="_id0:submit"     value="Next Step"/>
Componentes JSF (commandLink)<h:commandLink id="link" action="goto">  <h:outputText value="#{msg.linkName}"/></h:commandLink><a id="_id0:link“ href="#" onclick= "document.forms['_id0']['_id0:link'].value= '_id0:link';         document.forms['_id0'].submit(); return false;“>Next Page</a>
Componentes JSF (graphicImage)<h:graphicImage id="image"   alt="jsf-sun“ url="/images/jsf-sun.gif"></h:graphicImage> <img id="jsftags:image" src="/jsf-example/images/jsf-sun.gif"  alt="jsf-sun" />
Componentes JSF (inputText)<h:inputText id="address"  value="#{jsfexample.address}" /> <input type="text" name="jsftags:_id1"  value="123 JSF Ave" />
Componentes JSF (inputText / inputSecret)<h:inputText id="address” value="#{jsfexample.address}" /><input type="text" name="jsftags:_id1” value="123 JSF Ave" /><h:inputSecret redisplay="false“  value="#{jsfexample.password}" /> <input id="jsftags:password“   type="password“  name="jsftags:password“  value="secret" />
Componentes JSF (inputHidden /inputTextarea)<h:inputHidden id="hidden“  value="userPreference" /> <input id="jsftags:hidden”  type="hidden“  name="jsftags:hidden"   value="userPreference" /><h:inputTextarea id="textArea“  rows="4" cols="7“  value="Text goes here.."/><textarea id="jsftags:textArea“  name="jsftags:textArea“  cols="5" rows="3">    Text goes here..</textarea>
Componentes JSF (outputText / outputLabel)<h:outputText  value="#{jsfexample.zipCode}"/>123<h:outputLabel for="address“>    <h:outputText id="addressLabel“  value="User Home Address"/></h:outputLabel><span id="jsftags:addressLabel">  User Home Address</span>
Componentes JSF (outputLink)<h:outputLink  value="#{msg['jsfstudio.home.url']">        <f:verbatim>JSF Studio</f:verbatim></h:outputLink> <a href="http://www.jsf-studio.com"> JSF Studio</a>
Componentes JSF (message)<h:message style="color: red“  for="useraddress" />   <h:inputText id="useraddress“  value="#{jsfexample.address}“  required="true"/><h:commandButton action="save" value="Save"/><span style="color: red"> Validation Error: Value is required. </span> 	<input id="jsftags:useraddress" type="text" name="jsftags:useraddress" value="" /> <input type="submit" name="jsftags:_id1" value="Save" /> Escrevendo uma mensagem: FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário já Cadastrado!"));
Componentes JSF (selectBooleanCheckbox)<h:selectBooleanCheckbox  title="emailUpdates“  value="#{jsfexample.wantsEmailUpdates}" ></h:selectBooleanCheckbox><h:outputText  value="Would you like email updates?"/><input type="checkbox“  name="jsftags:_id6" checked title="emailUpdates" />Would you like email updates?
Componentes JSF (selectManyCheckbox)<h:selectManyCheckbox id="cars” value="#{carsBean.car}">  <f:selectItems  value="#{carBean.carList}"/></h:selectManyCheckbox>span id="jsftags:cars"><table><tr> <td><label for="jsftags:cars"> <input name="jsftags:cars“  value="accord" type="checkbox">    Honda Accord</input></label></td> <td><label for="jsftags:cars“><input name="jsftags:cars“ value="4runner" type="checkbox">    Toyota 4Runner</input> </label></td> <td><label for="jsftags:cars“><input name="jsftags:cars“ value="nissan-z" type="checkbox">    Nissan Z350</input<</label></td> </tr></table></span>
Componentes JSF (selectManyListbox)<h:selectManyListbox  id="cars_selectManyListbox“   value="#{carBean.car}">   <f:selectItems value="#{carBean.carList}"/></h:selectManyListbox> <select id="jsftags:cars_selectManyListbox” name="jsftags:cars_selectManyListbox” multiple size="3">   <option value="accord">Honda Accord</option>   <option value="4runner">Toyota 4Runner</option>   <option value="nissan-z">Nissan Z350</option></select>
Componentes JSF (selectOneMenu)<h:selectOneMenu id="selectCar“  value="#{carBean.currentCar}">  <f:selectItems value="#{carBean.carList}" /></h:selectOneMenu>  Honda Accord Toyota 4Runner Nissan Z350 <select id="jsftags:selectCar“ name="jsftags:selectCar" size="1">  <option value="accord">Honda Accord</option>  <option value="4runner">Toyota 4Runner</option>  <option value="nissan-z">Nissan Z350</option></select>
Componentes JSF (dataTable)<h:dataTable id="books" value="#{BookStore.items}" var="store">     <h:column>    <f:facet name="header“><h:outputText  value="#{msg.storeNameLabel}"/></f:facet>     <h:outputText value="#{store.name}"/>  </h:column>  <h:column>    <f:facet name="header“>Subject</f:facet>     <h:outputText value="#{store.subject}"/>  </h:column>  <h:column>    <f:facet name="header“><h:outputText  value="#{msg.storePriceLabel}"/></f:facet>     <h:outputText value="#{store.price}"/>  </h:column></h:dataTable>
Componentes JSF (dataTable)<table id="jsftags:books” class="list-background“> <thead>  <tr><th class="list-header” scope="col">Title</th> <th class="list-header” scope="col">Subject</th>   <th class="list-header” scope="col">Price ($)</th>  </tr> </thead> <tbody>  <tr class="list-row">   <td class="list-column-center“> JSF For Dummies</td>   <td class="list-column-right“> JSF</td><td class="list-column-center“> 25.0</td>  </tr>  <tr class="list-row">   <td class="list-column-center“> Struts For Dummies</td>   <td class="list-column-right“>Struts</td>   <td class="list-column-center“> 22.95</td>  </tr> </tbody></table>
Componentes JSFAtributos importantes:required, immediate, readonly, rendered ..... <h:inputText value="#{numberBean.userNumber}" required="true" validatorMessage="O número tem que ser entre 0 e 100" readonly=“false"  rendered=“true” > <h:commandButton value="Desistir" action="desistir" immediate="true"/>
Exercício 1 Criar um cadastro de Pessoa. Criar um bean que represente o formulário (Nome, Endereço, Telefone )Usar f:view e h:form para os formuláriosEspecificar o Action Controller com o atributo de ação h:commandButtonCriar uma Action para inserir os dados do formulário, chame a lógica de negócio, guarde os resultados em uma lista e imprima os valores no consoleUsar o  faces-config para declarar o form bean e navegaçãoApós inserir, imprimir no console quem foi inserido e enviar para uma página de sucesso com um botão voltar
Exercício 1 (Continuação) Validação: Utilizar o h:messages e h:message<h:messages style="color: red"/>Inserir algumas validações nos campos:<h:inputText value="#{user.name}" required="true" requiredMessage="Campo Obrigatorio" validatorMessage="Tamanho inválido"><f:validateLength maximum="30" minimum="3"/></h:inputText><br/>Enviar uma mensagem de sucesso após cadastrar o usuárioFacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário já Cadastrado!"));
Componentes JSF (dataTable) DataModel Para enviar os dados para view em fomato de tabela, basta criar um objeto DataModel
Para inserir os objetos no DataModel: dataModel.setWrappedData(Lista)
Para obter os objetos da tabela : dataModel.getWrappedData() ou getRowData()Exercício 2 Usando DataModel Inserir uma tabela no cadastro do exercício 1
Criar um link para apagar o registro da tabelaExercício 3 Criar um evento de mudança em um combo. Criar um combo na tela de tipo de endereço
Inserir os tipos (Rua, Quadra, Lote ....)
Criar um método para capturar essa mudança e imprimir no console o valor antigo e o novoExercício 4 (Opcional) Navegação:  Sortear um número usando o Math.random()*100
Pedir para o usuário entrar com o número
Se estiver certo, enviar para página de sucesso com opção de sair ou jogar novamente, se estiver errado avisar que está errado e informar se é maior ou menor, o usuário pode desistir, enviando para uma tela confirmação.Exercício 4 (Opcional) Navegação:  
Exercício 5 (Opcional) Criar validadores:Validador de Nome, que só aceite seu nome.
Validador de email
Validador que não aceite data no passado.Exercício 5 (Opcional) Criar validadores:public class ValidatorNome implements Validator {@Overridepublic void validate(FacesContext arg0, UIComponent arg1, Object arg2)					throws ValidatorException {	String nome = (String)arg2;	if (nome != null && nome.equalsIgnoreCase("gabriel")) {		throw new ValidatorException(new 		FacesMessage(arg1.getClientId(arg0),"Nome Inválido")); 	}	}}

Mais conteúdo relacionado

PPTX
Jsf com hibernate, spring security e maven
PPT
Anatomia do JSF, JavaServer Faces
PPTX
Introdução a jsf
PPTX
Apresentação JSF
PDF
JavaServer Faces - Desenvolvendo aplicações web com produtividade
PDF
JSF com Primefaces
PPT
JavaServer Faces Produtividade em Desenvolvimento
PDF
Introdução ao JavaServer Faces
Jsf com hibernate, spring security e maven
Anatomia do JSF, JavaServer Faces
Introdução a jsf
Apresentação JSF
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JSF com Primefaces
JavaServer Faces Produtividade em Desenvolvimento
Introdução ao JavaServer Faces

Mais procurados (20)

PDF
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
ODP
Arquitetura MVC, JavaBeans e DAO
PDF
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
PDF
JSF - JavaServer Faces
PDF
Aula parte 2 de JSF 2.2
PDF
Apostila Java Web com JSF, JPA e Primefaces
PDF
Como escolher o Framework Java para web?
PDF
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
PPTX
Apresentação jsf 2.0
ODP
JSF e outras tecnologias Java Web - IMES.java
PDF
Aula parte 1 de JSF 2.2
PDF
Apresentação jsf 1_2
PDF
Framework web 01 - Aula UTFPR 2018
PDF
Apresentação Java Web - Jsf+Hibernate
PDF
Dicas e truques sobre performance em JavaEE, JPA e JSF
PDF
Construindo aplicações web java com netbeans
PPTX
Curso jsf
PDF
Framework web 02 - 2016
PDF
Minicurso Java Server Faces
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Arquitetura MVC, JavaBeans e DAO
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
JSF - JavaServer Faces
Aula parte 2 de JSF 2.2
Apostila Java Web com JSF, JPA e Primefaces
Como escolher o Framework Java para web?
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Apresentação jsf 2.0
JSF e outras tecnologias Java Web - IMES.java
Aula parte 1 de JSF 2.2
Apresentação jsf 1_2
Framework web 01 - Aula UTFPR 2018
Apresentação Java Web - Jsf+Hibernate
Dicas e truques sobre performance em JavaEE, JPA e JSF
Construindo aplicações web java com netbeans
Curso jsf
Framework web 02 - 2016
Minicurso Java Server Faces
Anúncio

Destaque (11)

PPT
Produtividade com JavaServer Faces
PPT
11601快訊新聞五則
PDF
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
PDF
Desenvolvimento Web com JSF
PDF
Framework web 3 - JSF + Spring boot
PDF
Apostila jsf
PDF
Apostila JSF 2.0 - K19
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
PDF
Boas Práticas com JavaServer Faces (Jsf)
PDF
Os 10 maus hábitos dos desenvolvedores JSF
PPS
Teorias de Ensino
Produtividade com JavaServer Faces
11601快訊新聞五則
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
Desenvolvimento Web com JSF
Framework web 3 - JSF + Spring boot
Apostila jsf
Apostila JSF 2.0 - K19
Caelum java-testes-jsf-web-services-design-patterns-fj22
Boas Práticas com JavaServer Faces (Jsf)
Os 10 maus hábitos dos desenvolvedores JSF
Teorias de Ensino
Anúncio

Semelhante a Curso jsf (20)

PDF
Anatomia do JSF – JavaServer Faces
PDF
PDF
Tutorial JSF 2.0 (2012)
PPT
JavaServer Faces
ODP
Apresentação
PPT
Jsf – Java Sever Faces
PDF
Interfaces ricas JSF
PPT
Apresentação Facelets_UNIFEI
PDF
Desafios de um desenvolvedor JSF
PPTX
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
PPTX
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
PDF
Programação para Web II: JavaServer Faces
PDF
Sistema S2DG e Tecnologias Web
PDF
Novidades do JSF: Um tour completo no JSF 2.2
PPTX
TechDay - Sistemas WEB em Java - Rogério N. Jr.
PDF
Java web
PPT
Padrão Arquitetural MVC e suas aplicações para WEB
PDF
JSF 2 Components JustJava2011
PPTX
Minicurso jsf2.0
DOCX
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
Anatomia do JSF – JavaServer Faces
Tutorial JSF 2.0 (2012)
JavaServer Faces
Apresentação
Jsf – Java Sever Faces
Interfaces ricas JSF
Apresentação Facelets_UNIFEI
Desafios de um desenvolvedor JSF
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
Programação para Web II: JavaServer Faces
Sistema S2DG e Tecnologias Web
Novidades do JSF: Um tour completo no JSF 2.2
TechDay - Sistemas WEB em Java - Rogério N. Jr.
Java web
Padrão Arquitetural MVC e suas aplicações para WEB
JSF 2 Components JustJava2011
Minicurso jsf2.0
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...

Mais de jornaljava (8)

PPTX
Por dentro da nuvem
PPTX
Jornal java por dentro da nuvem
PPTX
Banco de Dados NoSql - JornalJava
PPTX
Criando um simples portlet com jboss portal
PPTX
PPTX
J boss seam
PPTX
Facelets
PPTX
Rich faces
Por dentro da nuvem
Jornal java por dentro da nuvem
Banco de Dados NoSql - JornalJava
Criando um simples portlet com jboss portal
J boss seam
Facelets
Rich faces

Curso jsf

  • 2. IntroduçãoDesenvolvimento WebAplicações web tornam-se mais e mais importantes Mais e mais complexas:Ajax, validação (server vs. client), efeitos... Exigência mais elevada do cliente durante os anos Interfaces ricas (fáceis de usar) Prazos cada vez mais curtos Desenvolvimento considerado difícil
  • 3. IntroduçãoSurgiram diversos frameworks MVC:Apache StrutsWebWork (Struts2) Spring MVC TapestryJbossSeamE muito outros.. continuam surgindo mais
  • 4. IntroduçãoProblemas Java não nos fornece o bastante para desenvolvermos aplicações web com produtividade Dificuldade para integrar vários frameworks (algumas vezes nem é possível) Falta de padrão para um framework web Ausência de uma API padrão para construir componentes web java  
  • 5. IntroduçãoUm pouco da história HTMLServletsJSP 
  • 6. IntroduçãoHTMLEstático, simplesNão tem conexão com Base De DadosÓtimo para criar Home PagesOlaMundo.html<html> <head> <title>Olá Mundo</title> </head> <body> Olá Mundo. </body> </html> 
  • 7. IntroduçãoServlets É uma extensão de servidoresDisponibiliza uma interface para o servidorRecursos Dinâmicos para webInterage com os clientesNecessita de um Servlet Container (Ex: Tomcat) 
  • 8. IntroduçãoServlets import java.io.*;import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>Olá Mundo</body></html>"); out.close(); } }
  • 9. IntroduçãoJava Server Pages – JSP O JSP foi desenvolvido APENAS para mostrar resultados, o SERVLET deveria fazer a ponte com o banco de dados e fazer as regras de negócioFacilitar a criação de HTMLScriplets: colocar código Java no JSP ;-(
  • 10. IntroduçãoOlaMundo.jsp<html> <body> <% String mensagem = "Olá Mundo!"; out.println(mensagem); %> <br> Muito mais simples de editar o html e muito maiscomplicado de editar o codigo Java <br></body></html>
  • 11. IntroduçãoFrameworksFrameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando as exigências do software do que com detalhes de baixo nível do sistemaNão reinventar a roda
  • 12. IntroduçãoStruts Framework: Action Based MVC para construções de aplicações WEBCada solicitação HTTP tem que ser respondida com uma resposta HTTPO .do é mapeado no arquivo struts-config.xmlO ActionServlet define o Action correspondente para a solicitação
  • 13. IntroduçãoStruts Framework: Action Based O ActionServlet coloca a entrada em um JavaBean , estes JavaBeans são definidos como FormBeansO Action pode acessar o FormBean efetuar qualquer operação e armazenar o resultado em um ResultBeanO Action interage com a camada de negócio onde uma base de dados poderá ser atualizada
  • 15. IntroduçãoFramework: Component BasedRápido aprendizadoBaseado em ComponentesDeixa o programador despreocupado com a parte visualProgramação Web como DesktopSimplicidadeAgilidade
  • 16. IntroduçãoFrameworks Web Component BasedJava Server FacesJBossSeamWicket
  • 17. JSF - IntroduçãoJavaServer Faces é...Uma especificação ?Um framework baseado em componentes ?Interface com o usuário ?Um framework dirigido a eventos ?Padrão de mercado ?RAD ?Um framework MVC ?
  • 18. JSF - IntroduçãoJavaServer Faces é... Uma especificação JSR 127 (JSF 1.0 e JSF 1.1) – 2004 JSF 1.0 – não alcançou o sucesso esperado JSF 1.1 – corrigiu os erros da versão anterior JSR 252 (JSF 1.2) - 2006 (Java EE 5.0) JSF 1.2 – melhor compatibilidade com JSP 2.1 e correção de bugs
  • 19. JSF - IntroduçãoJavaServer Faces é... • JSR 314 (JSF 2.0) • Arquitetura, produtividade, ferramentas RAD, AJAX, melhores componentes UI.. • Em desenvolvimento, porém estão planejando deixar bem integrado e intuitivo.
  • 20. JSF - IntroduçãoJavaServer Faces é... ... um framework baseado em componentes de interface com o usuário JSF é construído sob o conceito de componentes Os componentes são a base para a construção da interface com o usuário Existem componentes padrões equivalentes a quase todas as tags HTML e diversos componentes auxiliares
  • 21. JSF - IntroduçãoJavaServer Faces é... Existem diversas bibliotecas de componentes disponíveis comerciais e open source Os componentes são expressos através de tags em um JSP e posteriormente transformados em HTML
  • 22. JSF - Introdução... um framework dirigido a eventos Possui um modelo para manipulação de eventos Componentes geram determinados eventos Faz chamada à um método (ação no servidor) O estado da aplicação web muda devido ao evento disparado pelo usuário Um evento pode ser um click em um botão, focar sobre um input ou mesmo alterar o valor de uma combo-box
  • 23. JSF - Introdução... padrão de mercado É uma especificação (JCP) Java EE 5.0 Suporte de Big Players Sun, Apache, IBM, Oracle, BEA Systems, Borland, ... IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...) Implementações (Sun (R.I), Apache, IBM, ...) Conjuntos de componentes (ADF Faces, Apache MyFaces, WoodStock, IceFaces, JBoss RichFaces, ...)
  • 24. JSF - Introdução.. RAD (Rapid Application Development) 4 camadas: Arquitetura de componentes básica Conjunto de componentes padrão Infra-estrutura da aplicação Ferramenta RAD
  • 25. JSF - Introdução.. RAD (Rapid Application Development) JSF padroniza os primeiros três pontos e permite a criação de ferramentas RAD Utiliza-se IDEs drag-and-drop para construir aplicações Sun Studio Creator, NetBeans, Jdeveloper,Eclipse etc
  • 26. JSF - Introdução... um framework MVC para construir interfaces com o usuário para aplicações web. JSF inclui: Um conjunto de APIs para: representar os componentes UI e gerenciar o estado destes componentes manipular os eventos e validação de entrada do usuário definir e controlar a navegação entre as páginas dar suporte a internacionalização e acessibilidade
  • 27. JSF - IntroduçãoResumoÉ mais do que um framework, é uma especificação baseada em MVCSuporte à internacionalizaçãoFacilita criação de telasFacilita a transferência dos dados entre telas e camadas de negócio através da ELFacilidade para criação de componentes
  • 28. JSF - IntroduçãoResumoProdutividade para conversores recebidos do formulário para os tipos nas classesFlexibilidade para renderizaçãoCriar modelos simples de eventos entre interfaces gráficas e as classes no servidorMecanismos produtivos para validação de campos na tela
  • 29. JSF - IntroduçãoPor que usar JSF? É um padrão de mercado Presente na especificação JEE5.0 e em breve JEE6.0 Suporte de Big Players Fácil de usar e produtivo Fornece separação de funções que envolvem a construção de aplicações Web
  • 30. JSFPor que usar JSF? Alta abstração para desenvolvimento de aplicação web Modelo de programação dirigido a eventos (oposto ao modelo HTTP request/response) Baixa curva de aprendizagem da equipe Vários pontos de extensão (converters, validators, listeners etc) Componentes já prontos!
  • 31. JSFPor que usar JSF? Reusabilidade e estrutura de componentes extensível Acessibilidade (browsers, celulares, pda’s, ...) Segurança OWASP (Open Web Application Security Project) cross-site scripting, session hijacking, execução de métodos, ... Natureza orientada a componentes, validação e pontos de extensão
  • 32. JSFPor que usar JSF? Grande atividade da comunidade em fóruns, listas de discussão, blogs, portais, revistas, livros etc Integração com diversos frameworks: Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA, JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets, Sitemesh, DWR, EXT, Crank, Beehive-Webflow, GWT, Portlets e muitos outros
  • 33. JSFPor que usar JSF? Testes unitários Shaletesting framework Templates Tiles e Sitemesh Facelets
  • 34. JSFPor que usar JSF? IDEs e WYSIWYG (What you see is what you get) Eclipse (MyEclipse, Europa, Ganymed), IntelliJ IDEA, Jbuilder, NetBeans (Visual WebPack) , IBM Rational App/Web Sun Java Studio Creator , Oracle Jdeveloper, Red Hat Developer Studio (antigo Exadel Studio) e JSFToolbox (Dreamweaver)
  • 35. JSFPor que usar JSF? Grande variedade de componentes comerciais e open- source disponíveis Myfaces Tomahawk Backbase Myfaces Sandbox Simplica (ECruiser Suite) Myfaces Tobago QuipuKit Myfaces Trinidad Blueprints
  • 36. JSFPor que usar JSF? Myfaces Orchestra RCFaces ADF Faces Jenia4Faces IceFaces ZK WoodStock G4JSF (GWT API)JBoss RichFaces Dynamic Faces JBoss Ajax4jsf Crank
  • 37. JSFConceitos chaves do JSF Componentes Renderers Managed-beans Converters / Validators Navegação Eventos Ciclo de vida (Request Lifecycle)
  • 38. JSFComponentesSepara a lógica de negócio da apresentação Cada view é composta por uma hierarquia de componentes Componentes podem ser adicionados na view programaticamente ou via template (JSP por default, ou Facelets para melhor desempenho e fácil desenvolvimento)
  • 39. JSFComponentes são expressos em tags em uma página JSP e em sua maioria são de interface com o usuário Os componentes padrões são divididos em dois grupos: Faces Core <f:view>, <f:loadBundle>, <f:param> HTML wrappers <h:dataTable>, <h:selectOneMenu> Componente = class + [renderer] + tag handler (JSP)
  • 40. JSFRenderers Responsável por exibir o componente no cliente São agrupados em render kits Render kit padrão é o HTML, mas podemos ter WML, SVG etc. Efetua o encode (gera HTML do componente) Efetua o decode (seta o componente com os dados da URL query string e do formulário)
  • 41. JSFExemplo:<h:inputText id=“login” size=“16” /> <input type=“text” id=“myForm:login” name=“myForm:login” size=“16” />
  • 43. JSFManaged beans POJO – Plain Old Java Objects
  • 44. JSFManaged beans Podem ser definidos nos escopos de:Application, Session, Request e NoneÉ uma classe que envia objetos de negócio para camada de apresentaçãoSão registrados no faces-config.xml
  • 45. JSFManaged beans Objetos que sofrerão alterações em seus atributos durante uma requisição, assim como seus métodos podem ser chamados a partir de um commandSão como as Actions do Struts, porém os form beans são injetados por setters dentro do seu próprio beanOs ManagedBeans serão usados na EL das páginas
  • 47. JSFObtendo o Managed beans nos escopos:Request:User user = (User)FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("user");SessionUser user = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");Inserindo o Managed beans nos escopos:Request:FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("user", (User)users.getRowData());SessionFacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", (User)users.getRowData());
  • 48. JSFJSF Value Binding “Binda” valor do componente ao managed-bean O binding ocorre através de JSF Expression Language (EL) Semelhante a JSTL, porém usa-se ‘#{}’ no lugar de ‘${}’ Pode-se executar métodos no modelo através de expressões Não é processada imediatamente como na JSTL A partir da JSF 1.2 utiliza-se a Unified Expression Language (JSP 2.1) que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL <h:outputText value="#{pessoa.nome}"/>
  • 51. JSFConverters Tem por finalidade converter e/ou formatar objetos do tipo Java para String e vice-versa Converters são bi-direcionais Managed-bean faz: getAsObject() JSP faz: getAsString()
  • 52. JSFConverters JSF já fornece converters padrões para date / time, numbers etc Você pode implementar seu próprio converter:Basta implementar a interface javax.faces.convert.ConverterRegistrar o converter no faces-config.xml O converter pode atuar de forma explícita(id) ou implícita(class) de acordo com a sua configuração no faces-config.xml
  • 53. JSFConverters javax.faces.convert.ConverterConverter é registrado dentro faces-config.xml
  • 54. JSFConverter para que toda propriedade do tipo org.com.model.CPF dequalquer bean use este converter <converter> <converter-for-class> org.com.model.CPF </converter-for-class> <converter-class> org.com.faces.CPFConverter </converter-class> </converter>
  • 55. JSFConverter declarado explicitamente:<h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> <f:converter converterId=“br.com.CPFConverter“ /> </h:inputText> Ou implicitamente (converter mapeado para objetos do tipo CPF) <h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> NADA AQUI ;-)</h:inputText>
  • 56. JSFConverter Padrões do JSF:<h:inputText id="age" value="#{UserRegistration.user.age}"> <f:converter id="javax.faces.Short"/> </h:inputText>
  • 57. JSFValidatores Tem por responsabilidade garantir que o valor informado pelo usuário seja válido Validador trabalha com objetos, não somente com Strings JSF já fornece validadores padrões como required, length, range etc
  • 58. JSFVocê pode implementar seu próprio validador Basta implementar a interface javax.faces.validator.ValidatorRegistrar o validador no faces-config.xml Você pode associar um ou mais validadores aum componente
  • 59. JSFjavax.faces.validator.ValidatorValidadores são registrados no faces-config.xml <validator> <validator-id>br.com.validaCPF</validator-id> <validator-class>faces.validaCPF </validator-class></validator>
  • 60. JSFValidação de obrigatoriedade e comprimento do campo:<h:inputText id=“firstName“ value="#{user.firstName}“ required=“true”><f:validateLength minimum="2“ maximum="25“ /> </h:inputText>
  • 61. JSFNavegaçãoNavegação de uma página para outra Simples e poderoso sistema de navegação O framework seleciona a próxima view baseado: Na view anterior Resultado(outcome) de uma action EL de ação (ex.: #{mBean.user.save}) Qualquer combinação acimaPermite wildcard (‘*’) para páginas de origem (from-view-id)
  • 64. JSFEventosComponentes geram determinados eventos que por sua vez disparam ações no servidor (método(s) no managed-bean ou listeners) Você também pode implementar listeners de ação associados a outros componentes do formulário Os listeners mais comuns do JSF são ActionListener ValueChangeListener
  • 65. JSFAction event para navegação :<h:commandButton action=“listar” value=“Listar” /> Action event que executa método no managed-bean <h:commandLink action=“#{cadastroBean.cadastrar}” value=“Cadastrar” /> Método no managed-bean public String cadastrar() { // processa evento return “listar”; // retorna para view “listar” }
  • 66. JSFValue-change event que executa método após alterar ovalor do componente <h:selectOneMenu id=“UF” value=“#{cadastroBean.uf}” valueChangeListener=“#{cadastroBean.carregaCidades}” onchange=“submit();”> <f:selectItems value=“#{cadastroBean.ufList}” /> </h:selectOneMenu>
  • 67. JSFMétodo no managed-bean public void carregaCidades(ValueChangeEvent event) { // processa evento String uf = event.getNewValue(); // obtém novo valor this.cidadesList = Servico.carregaCidades(uf); // processa evento }
  • 69. JSF (Fases)São Atendidas pelo Reader Response e Restore Component TreeRestore Component Tree: O conjunto de componentes JSF é criado ou restaurado dependento da requisição (Primeira ou demais vezes executadas) 
  • 70. JSF (Fases)Apply request Values: Os componentes irão extrair seu novo valor dos parâmetros da Request, colocando-os em variáveis de estado no servidor
  • 71. JSF (Fases)Process Validations: todos os validadores serão executados, em caso de erro de qualquer valor, a mensagem é alocada no FacesContext, caso contrário ele atualiza (Update Model Values) os valores dos inputs na camada de negócio através da EL 
  • 72. JSF (Fases)Invoke Application: Os métodos do ManagedBeans são executados e as regras de navegação (Gravar, Excluir, Alterar,...) são resolvidas. Se tudo ocorrer bem é renderizada pelo container do JSP, caso contrário as mensagens gravadas no FacesContext são apresentadas 
  • 73. JSF (Fases)Caso queira pular as fazer de validação e conversão, basta utilizar o parametro immediate=true<h:commandButton action=“proximo" value=“Proximo" immediate="true"/> 
  • 74. JSFJSF Extension Points Customizar componentes Phase listeners (antes, depois de qualquer fase) Customizar converters / validators Customizar renderers Customizar ActionListenerImpl para manipular eventos Decorar ou substituir view handler, navigation handler, state manager etc
  • 75. JSFfaces-config.xmlArquivo XML para configurar recursos da aplicação Contém regras de navegação, customização e extensão de converters, validators, componentes etc Geralmente está localizado dentro de /WEB-INF/faces-config.xml Pode ser dividido em diretórios e sub-diretórios ou dentro de arquivos jar Seta javax.faces.application.CONFIG_FILES no web.xml Ou então coloca-se META-INF/faces-config.xml dentro de um jar
  • 76. JSFfaces-config.xml (Resumo)<faces-config ... > <converter> <converter-id>core.faces.CnpfCnpjConverter</converter-id> <converter-class>converter.CnpfCnpjConverter</converter-class> </converter>
  • 77. JSFfaces-config.xml (Resumo)<managed-bean> <managed-bean-name>reportBean</managed-bean-name> <managed-bean-class>bean.ReportBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
  • 78. JSFfaces-config.xml (Resumo)<navigation-rule> <from-view-id>/jsp/deposito/tiporeq/searchList.jsp</from-view-id> <navigation-case> <from-outcome>deposito.tiporeq.update</from-outcome> <to-view-id>/jsp/deposito/tiporeq/update.jsp</to-view-id> </navigation-case> </navigation-rule>
  • 79. Componentes JSF (Form)<h:form id="jsftags"> ...</h:form><form id="jsftags" method="post" action="/jsftags/faces/pages/tags.jsp" enctype="application/x-www-form-urlencoded"> ... <input type="hidden" name="jsftags" value="jsftags" /> <input type="hidden" name="jsftags:link" /></form>
  • 80. Componentes JSF (commandButton)<h:commandButton id="submit" value="#{msg.buttonHeader}" action="nextPage"></h:commandButton><input id="_id0:submit" type="submit" name="_id0:submit" value="Next Step"/>
  • 81. Componentes JSF (commandLink)<h:commandLink id="link" action="goto"> <h:outputText value="#{msg.linkName}"/></h:commandLink><a id="_id0:link“ href="#" onclick= "document.forms['_id0']['_id0:link'].value= '_id0:link'; document.forms['_id0'].submit(); return false;“>Next Page</a>
  • 82. Componentes JSF (graphicImage)<h:graphicImage id="image" alt="jsf-sun“ url="/images/jsf-sun.gif"></h:graphicImage> <img id="jsftags:image" src="/jsf-example/images/jsf-sun.gif" alt="jsf-sun" />
  • 83. Componentes JSF (inputText)<h:inputText id="address" value="#{jsfexample.address}" /> <input type="text" name="jsftags:_id1" value="123 JSF Ave" />
  • 84. Componentes JSF (inputText / inputSecret)<h:inputText id="address” value="#{jsfexample.address}" /><input type="text" name="jsftags:_id1” value="123 JSF Ave" /><h:inputSecret redisplay="false“ value="#{jsfexample.password}" /> <input id="jsftags:password“ type="password“ name="jsftags:password“ value="secret" />
  • 85. Componentes JSF (inputHidden /inputTextarea)<h:inputHidden id="hidden“ value="userPreference" /> <input id="jsftags:hidden” type="hidden“ name="jsftags:hidden" value="userPreference" /><h:inputTextarea id="textArea“ rows="4" cols="7“ value="Text goes here.."/><textarea id="jsftags:textArea“ name="jsftags:textArea“ cols="5" rows="3"> Text goes here..</textarea>
  • 86. Componentes JSF (outputText / outputLabel)<h:outputText value="#{jsfexample.zipCode}"/>123<h:outputLabel for="address“> <h:outputText id="addressLabel“ value="User Home Address"/></h:outputLabel><span id="jsftags:addressLabel"> User Home Address</span>
  • 87. Componentes JSF (outputLink)<h:outputLink value="#{msg['jsfstudio.home.url']"> <f:verbatim>JSF Studio</f:verbatim></h:outputLink> <a href="http://www.jsf-studio.com"> JSF Studio</a>
  • 88. Componentes JSF (message)<h:message style="color: red“ for="useraddress" /> <h:inputText id="useraddress“ value="#{jsfexample.address}“ required="true"/><h:commandButton action="save" value="Save"/><span style="color: red"> Validation Error: Value is required. </span> <input id="jsftags:useraddress" type="text" name="jsftags:useraddress" value="" /> <input type="submit" name="jsftags:_id1" value="Save" /> Escrevendo uma mensagem: FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário já Cadastrado!"));
  • 89. Componentes JSF (selectBooleanCheckbox)<h:selectBooleanCheckbox title="emailUpdates“ value="#{jsfexample.wantsEmailUpdates}" ></h:selectBooleanCheckbox><h:outputText value="Would you like email updates?"/><input type="checkbox“ name="jsftags:_id6" checked title="emailUpdates" />Would you like email updates?
  • 90. Componentes JSF (selectManyCheckbox)<h:selectManyCheckbox id="cars” value="#{carsBean.car}"> <f:selectItems value="#{carBean.carList}"/></h:selectManyCheckbox>span id="jsftags:cars"><table><tr> <td><label for="jsftags:cars"> <input name="jsftags:cars“ value="accord" type="checkbox"> Honda Accord</input></label></td> <td><label for="jsftags:cars“><input name="jsftags:cars“ value="4runner" type="checkbox"> Toyota 4Runner</input> </label></td> <td><label for="jsftags:cars“><input name="jsftags:cars“ value="nissan-z" type="checkbox"> Nissan Z350</input<</label></td> </tr></table></span>
  • 91. Componentes JSF (selectManyListbox)<h:selectManyListbox id="cars_selectManyListbox“ value="#{carBean.car}"> <f:selectItems value="#{carBean.carList}"/></h:selectManyListbox> <select id="jsftags:cars_selectManyListbox” name="jsftags:cars_selectManyListbox” multiple size="3"> <option value="accord">Honda Accord</option> <option value="4runner">Toyota 4Runner</option> <option value="nissan-z">Nissan Z350</option></select>
  • 92. Componentes JSF (selectOneMenu)<h:selectOneMenu id="selectCar“ value="#{carBean.currentCar}"> <f:selectItems value="#{carBean.carList}" /></h:selectOneMenu>  Honda Accord Toyota 4Runner Nissan Z350 <select id="jsftags:selectCar“ name="jsftags:selectCar" size="1"> <option value="accord">Honda Accord</option> <option value="4runner">Toyota 4Runner</option> <option value="nissan-z">Nissan Z350</option></select>
  • 93. Componentes JSF (dataTable)<h:dataTable id="books" value="#{BookStore.items}" var="store"> <h:column> <f:facet name="header“><h:outputText value="#{msg.storeNameLabel}"/></f:facet> <h:outputText value="#{store.name}"/> </h:column> <h:column> <f:facet name="header“>Subject</f:facet> <h:outputText value="#{store.subject}"/> </h:column> <h:column> <f:facet name="header“><h:outputText value="#{msg.storePriceLabel}"/></f:facet> <h:outputText value="#{store.price}"/> </h:column></h:dataTable>
  • 94. Componentes JSF (dataTable)<table id="jsftags:books” class="list-background“> <thead> <tr><th class="list-header” scope="col">Title</th> <th class="list-header” scope="col">Subject</th> <th class="list-header” scope="col">Price ($)</th> </tr> </thead> <tbody> <tr class="list-row"> <td class="list-column-center“> JSF For Dummies</td> <td class="list-column-right“> JSF</td><td class="list-column-center“> 25.0</td> </tr> <tr class="list-row"> <td class="list-column-center“> Struts For Dummies</td> <td class="list-column-right“>Struts</td> <td class="list-column-center“> 22.95</td> </tr> </tbody></table>
  • 95. Componentes JSFAtributos importantes:required, immediate, readonly, rendered ..... <h:inputText value="#{numberBean.userNumber}" required="true" validatorMessage="O número tem que ser entre 0 e 100" readonly=“false" rendered=“true” > <h:commandButton value="Desistir" action="desistir" immediate="true"/>
  • 96. Exercício 1 Criar um cadastro de Pessoa. Criar um bean que represente o formulário (Nome, Endereço, Telefone )Usar f:view e h:form para os formuláriosEspecificar o Action Controller com o atributo de ação h:commandButtonCriar uma Action para inserir os dados do formulário, chame a lógica de negócio, guarde os resultados em uma lista e imprima os valores no consoleUsar o faces-config para declarar o form bean e navegaçãoApós inserir, imprimir no console quem foi inserido e enviar para uma página de sucesso com um botão voltar
  • 97. Exercício 1 (Continuação) Validação: Utilizar o h:messages e h:message<h:messages style="color: red"/>Inserir algumas validações nos campos:<h:inputText value="#{user.name}" required="true" requiredMessage="Campo Obrigatorio" validatorMessage="Tamanho inválido"><f:validateLength maximum="30" minimum="3"/></h:inputText><br/>Enviar uma mensagem de sucesso após cadastrar o usuárioFacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário já Cadastrado!"));
  • 98. Componentes JSF (dataTable) DataModel Para enviar os dados para view em fomato de tabela, basta criar um objeto DataModel
  • 99. Para inserir os objetos no DataModel: dataModel.setWrappedData(Lista)
  • 100. Para obter os objetos da tabela : dataModel.getWrappedData() ou getRowData()Exercício 2 Usando DataModel Inserir uma tabela no cadastro do exercício 1
  • 101. Criar um link para apagar o registro da tabelaExercício 3 Criar um evento de mudança em um combo. Criar um combo na tela de tipo de endereço
  • 102. Inserir os tipos (Rua, Quadra, Lote ....)
  • 103. Criar um método para capturar essa mudança e imprimir no console o valor antigo e o novoExercício 4 (Opcional) Navegação:  Sortear um número usando o Math.random()*100
  • 104. Pedir para o usuário entrar com o número
  • 105. Se estiver certo, enviar para página de sucesso com opção de sair ou jogar novamente, se estiver errado avisar que está errado e informar se é maior ou menor, o usuário pode desistir, enviando para uma tela confirmação.Exercício 4 (Opcional) Navegação:  
  • 106. Exercício 5 (Opcional) Criar validadores:Validador de Nome, que só aceite seu nome.
  • 108. Validador que não aceite data no passado.Exercício 5 (Opcional) Criar validadores:public class ValidatorNome implements Validator {@Overridepublic void validate(FacesContext arg0, UIComponent arg1, Object arg2) throws ValidatorException { String nome = (String)arg2; if (nome != null && nome.equalsIgnoreCase("gabriel")) { throw new ValidatorException(new FacesMessage(arg1.getClientId(arg0),"Nome Inválido")); } }}
  • 109. Exercício 6 (Opcional) Criar conveter:Criar um objeto UF (código e nome)
  • 111. Criar um converter para UFExercício 6 (Opcional) Converter:public class UFConverter implements Converter {@Overridepublic Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {if(StringUtils.isEmpty(value)){return null; } UF uf = new UF();if (value.equals("DF")) { uf.setCodigo(1); uf.setNome("DF"); } else if (value.equals("SP")) { uf.setCodigo(3); uf.setNome("SP"); } else if (value.equals("GO")) { uf.setCodigo(3); uf.setNome("GO"); }return uf;}@Overridepublic String getAsString(FacesContext arg0, UIComponent arg1, Object value) {return value.toString();} <h:selectOneMenu value="#{user.uf}" valueChangeListener="#{userAction.mudarUF}" onblur="submit()" converter="ufConverter"> <f:selectItems value="#{userAction.listaUF}" /> </h:selectOneMenu> public List<SelectItem> getListaUF() {List<SelectItem> items = new ArrayList<SelectItem>();items.add(new SelectItem(new UF(1 , "DF")));items.add(new SelectItem(new UF(2 , "SP")));items.add(new SelectItem(new UF(3 , "GO")));return items;}
  • 112. JSF 2.0 O que vem aí com JSF 2.0 Suporte a templates, baseado no Facelets, Tiles, dentre outros
  • 113. Simplificar a criação de aplicações do tipo CRUD
  • 114. Melhor tratamento de mensagens de erro
  • 115. Mecanismo de tratamento de exceções padrão
  • 116. Criação de aplicações Web sem XML, utilizando anotações
  • 117. Simplificação no desenvolvimento de componentes
  • 118. Especificar onde os artefatos (Conversores, Renderizadores, etc.) devem ser colocados no WAR, permitindo ao container encontrá-los sem a necessidade de sua definição em arquivos de configuração
  • 119. Permitir que artefatos sejam alterados sem a necessidade de reinicializar o servidorFIM