Você está na página 1de 108

JSF

Introduo

Introduo Desenvolvimento Web Aplicaes web tornam-se mais e mais importantes Mais e mais complexas:
Ajax, validao (server vs. client), efeitos... Exigncia mais elevada do cliente durante os anos Interfaces ricas (fceis de usar) Prazos cada vez mais curtos Desenvolvimento considerado difcil

Introduo Surgiram diversos frameworks MVC: Apache Struts WebWork (Struts2) Spring MVC Tapestry Jboss Seam E muito outros.. continuam surgindo mais

Introduo Problemas Java no nos fornece o bastante para desenvolvermos aplicaes web com produtividade Dificuldade para integrar vrios frameworks (algumas vezes nem possvel) Falta de padro para um framework web Ausncia de uma API padro para construir componentes web java

Introduo Um pouco da histria HTML Servlets JSP

Introduo HTML Esttico, simples No tem conexo com Base De Dados timo para criar Home Pages
OlaMundo.html <html> <head> <title>Ol Mundo</title> </head> <body> Ol Mundo. </body> </html>

Introduo Servlets uma extenso de servidores Disponibiliza uma interface para o servidor Recursos Dinmicos para web Interage com os clientes Necessita de um Servlet Container (Ex: Tomcat)

Introduo Servlets
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(); } }

Introduo Java 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 negcio Facilitar a criao de HTML Scriplets: colocar cdigo Java no JSP ;-(

Introduo OlaMundo.jsp
<html> <body> <% String mensagem = "Ol Mundo!"; out.println(mensagem); %> <br> Muito mais simples de editar o html e muito mais complicado de editar o codigo Java <br> </body> </html>

Introduo Frameworks Frameworks so projetados com a inteno de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando as exigncias do software do que com detalhes de baixo nvel do sistema No reinventar a roda

Introduo Struts Framework: Action Based MVC para construes de aplicaes WEB Cada solicitao HTTP tem que ser respondida com uma resposta HTTP O .do mapeado no arquivo struts-config.xml O ActionServlet define o Action correspondente para a solicitao

Introduo Struts Framework: Action Based O ActionServlet coloca a entrada em um JavaBean , estes JavaBeans so definidos como FormBeans O Action pode acessar o FormBean efetuar qualquer operao e armazenar o resultado em um ResultBean O Action interage com a camada de negcio onde uma base de dados poder ser atualizada

Introduo Struts Framework: Action Based

Introduo Framework: Component Based Rpido aprendizado Baseado em Componentes Deixa o programador despreocupado com a parte visual Programao Web como Desktop Simplicidade Agilidade

Introduo Frameworks Web Component Based Java Server Faces JBossSeam Wicket

JSF - Introduo JavaServer Faces ... Uma especificao ? Um framework baseado em componentes ? Interface com o usurio ? Um framework dirigido a eventos ? Padro de mercado ? RAD ? Um framework MVC ?

JSF - Introduo JavaServer Faces ...


Uma especificao JSR 127 (JSF 1.0 e JSF 1.1) 2004 JSF 1.0 no alcanou o sucesso esperado JSF 1.1 corrigiu os erros da verso anterior JSR 252 (JSF 1.2) - 2006 (Java EE 5.0) JSF 1.2 melhor compatibilidade com JSP 2.1 e correo de bugs

JSF - Introduo JavaServer Faces ...


JSR 314 (JSF 2.0) Arquitetura, produtividade, ferramentas RAD, AJAX, melhores componentes UI.. Em desenvolvimento, porm esto planejando deixar bem integrado e intuitivo.

JSF - Introduo JavaServer Faces ...


... um framework baseado em componentes de interface com o usurio JSF construdo sob o conceito de componentes Os componentes so a base para a construo da interface com o usurio Existem componentes padres equivalentes a quase todas as tags HTML e diversos componentes auxiliares

JSF - Introduo JavaServer Faces ...


Existem diversas bibliotecas de componentes disponveis comerciais e open source Os componentes so expressos atravs de tags em um JSP e posteriormente transformados em HTML

JSF - Introduo ... um framework dirigido a eventos Possui um modelo para manipulao de eventos Componentes geram determinados eventos Faz chamada um mtodo (ao no servidor) O estado da aplicao web muda devido ao evento disparado pelo usurio Um evento pode ser um click em um boto, focar sobre um input ou mesmo alterar o valor de uma combo-box

JSF - Introduo ... padro de mercado uma especificao (JCP) Java EE 5.0 Suporte de Big Players Sun, Apache, IBM, Oracle, BEA Systems, Borland, ... IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...) Implementaes (Sun (R.I), Apache, IBM, ...) Conjuntos de componentes (ADF Faces, Apache MyFaces, WoodStock, IceFaces, JBoss RichFaces, ...)

JSF - Introduo .. RAD (Rapid Application Development) 4 camadas:


Arquitetura de componentes bsica Conjunto de componentes padro Infra-estrutura da aplicao Ferramenta RAD

JSF - Introduo .. RAD (Rapid Application Development) JSF padroniza os primeiros trs pontos e permite a criao de ferramentas RAD Utiliza-se IDEs drag-and-drop para construir aplicaes Sun Studio Creator, NetBeans, Jdeveloper,Eclipse etc

JSF - Introduo ... um framework MVC para construir interfaces com o usurio para aplicaes web. JSF inclui: Um conjunto de APIs para: representar os componentes UI e gerenciar o estado destes componentes manipular os eventos e validao de entrada do usurio definir e controlar a navegao entre as pginas dar suporte a internacionalizao e acessibilidade

JSF - Introduo Resumo mais do que um framework, uma especificao baseada em MVC Suporte internacionalizao Facilita criao de telas Facilita a transferncia dos dados entre telas e camadas de negcio atravs da EL Facilidade para criao de componentes

JSF - Introduo Resumo Produtividade para conversores recebidos do formulrio para os tipos nas classes Flexibilidade para renderizao Criar modelos simples de eventos entre interfaces grficas e as classes no servidor Mecanismos produtivos para validao de campos na tela

JSF - Introduo Por que usar JSF? um padro de mercado Presente na especificao JEE5.0 e em breve JEE6.0 Suporte de Big Players Fcil de usar e produtivo Fornece separao de funes que envolvem a construo de aplicaes Web

JSF Por que usar JSF? Alta abstrao para desenvolvimento de aplicao web Modelo de programao dirigido a eventos (oposto ao modelo HTTP request/response) Baixa curva de aprendizagem da equipe Vrios pontos de extenso (converters, validators, listeners etc) Componentes j prontos!

JSF Por que usar JSF? Reusabilidade e estrutura de componentes extensvel Acessibilidade (browsers, celulares, pdas, ...) Segurana OWASP (Open Web Application Security Project) cross-site scripting, session hijacking, execuo de mtodos, ... Natureza orientada a componentes, validao e pontos de extenso

JSF Por que usar JSF? Grande atividade da comunidade em fruns, listas de discusso, blogs, portais, revistas, livros etc Integrao com diversos frameworks: Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA, JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets, Sitemesh, DWR, EXT, Crank, BeehiveWebflow, GWT, Portlets e muitos outros

JSF Por que usar JSF? Testes unitrios Shale testing framework Templates Tiles e Sitemesh Facelets

JSF Por 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)

JSF Por que usar JSF? Grande variedade de componentes comerciais e opensource disponveis Myfaces Tomahawk Backbase Myfaces Sandbox Simplica (ECruiser Suite) Myfaces Tobago QuipuKit Myfaces Trinidad Blueprints

JSF Por que usar JSF? Myfaces Orchestra ADF Faces IceFaces WoodStock JBoss RichFaces JBoss Ajax4jsf RCFaces Jenia4Faces ZK G4JSF (GWT API) Dynamic Faces Crank

JSF Conceitos chaves do JSF Componentes Renderers Managed-beans Converters / Validators Navegao Eventos Ciclo de vida (Request Lifecycle)

JSF Componentes Separa a lgica de negcio da apresentao 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 fcil desenvolvimento)

JSF Componentes so expressos em tags em uma pgina JSP e em sua maioria so de interface com o usurio Os componentes padres so divididos em dois grupos: Faces Core <f:view>, <f:loadBundle>, <f:param> HTML wrappers <h:dataTable>, <h:selectOneMenu> Componente = class + [renderer] + tag handler (JSP)

JSF Renderers Responsvel por exibir o componente no cliente So agrupados em render kits Render kit padro 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 formulrio)

JSF Exemplo: <h:inputText id=login size=16 />

<input type=text id=myForm:login name=myForm:login size=16 />

JSF Renderes:

JSF Managed beans POJO Plain Old Java Objects

JSF Managed beans Podem ser definidos nos escopos de: Application, Session, Request e None uma classe que envia objetos de negcio para camada de apresentao So registrados no faces-config.xml

JSF Managed beans Objetos que sofrero alteraes em seus atributos durante uma requisio, assim como seus mtodos podem ser chamados a partir de um command So como as Actions do Struts, porm os form beans so injetados por setters dentro do seu prprio bean Os ManagedBeans sero usados na EL das pginas

JSF Managed beans

JSF Obtendo o Managed beans nos escopos:


Request:
User user = (User)FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("user");

Session
User user = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");

Inserindo o Managed beans nos escopos:


Request:
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("user", (User)users.getRowData());

Session
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", (User)users.getRowData());

JSF
JSF Value Binding Binda valor do componente ao managed-bean O binding ocorre atravs de JSF Expression Language (EL) Semelhante a JSTL, porm usa-se #{} no lugar de ${} Pode-se executar mtodos no modelo atravs de expresses No 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}"/>

JSF
JSF Value Binding

JSF
JSF Value Binding

JSF Converters Tem por finalidade converter e/ou formatar objetos do tipo Java para String e vice-versa Converters so bi-direcionais Managed-bean faz: getAsObject() JSP faz: getAsString()

JSF Converters JSF j fornece converters padres para date / time, numbers etc Voc pode implementar seu prprio converter:
Basta implementar a interface javax.faces.convert.Converter Registrar o converter no faces-config.xml

O converter pode atuar de forma explcita(id) ou implcita(class) de acordo com a sua configurao no faces-config.xml

JSF Converters javax.faces.convert.Converter

Converter registrado dentro faces-config.xml

JSF
Converter para que toda propriedade do tipo org.com.model.CPF de qualquer bean use este converter
<converter> <converter-for-class> org.com.model.CPF </converter-for-class> <converter-class> org.com.faces.CPFConverter </converter-class> </converter>

JSF
Converter 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>

JSF
Converter Padres do JSF:

<h:inputText id="age" value="#{UserRegistration.user.age}"> <f:converter id="javax.faces.Short"/> </h:inputText>

JSF Validatores Tem por responsabilidade garantir que o valor informado pelo usurio seja vlido Validador trabalha com objetos, no somente com Strings JSF j fornece validadores padres como required, length, range etc

JSF Voc pode implementar seu prprio validador Basta implementar a interface javax.faces.validator.Validator Registrar o validador no faces-config.xml Voc pode associar um ou mais validadores a um componente

JSF javax.faces.validator.Validator

Validadores so registrados no faces-config.xml


<validator> <validator-id>br.com.validaCPF</validator-id> <validator-class>faces.validaCPF </validator-class> </validator>

JSF Validao de obrigatoriedade e comprimento do campo:


<h:inputText id=firstName value="#{user.firstName} required=true> <f:validateLength minimum="2 maximum="25 /> </h:inputText>

JSF
Navegao Navegao de uma pgina para outra Simples e poderoso sistema de navegao O framework seleciona a prxima view baseado:
Na view anterior Resultado(outcome) de uma action EL de ao (ex.: #{mBean.user.save}) Qualquer combinao acima

Permite wildcard (*) para pginas de origem (from-view-id)

JSF Navegao

JSF Navegao

JSF Eventos Componentes geram determinados eventos que por sua vez disparam aes no servidor (mtodo(s) no managed-bean ou listeners) Voc tambm pode implementar listeners de ao associados a outros componentes do formulrio Os listeners mais comuns do JSF so
ActionListener ValueChangeListener

JSF Action event para navegao :


<h:commandButton action=listar value=Listar />

Action event que executa mtodo no managed-bean


<h:commandLink action=#{cadastroBean.cadastrar} value=Cadastrar />

Mtodo no managed-bean
public String cadastrar() { // processa evento return listar; // retorna para view listar }

JSF Value-change event que executa mtodo aps alterar o valor do componente
<h:selectOneMenu id=UF value=#{cadastroBean.uf} valueChangeListener=#{cadastroBean.carregaCidades} onchange=submit();> <f:selectItems value=#{cadastroBean.ufList} /> </h:selectOneMenu>

JSF Mtodo no managed-bean


public void carregaCidades(ValueChangeEvent event) { // processa evento String uf = event.getNewValue(); // obtm novo valor this.cidadesList = Servico.carregaCidades(uf); // processa evento }

JSF JSF Request Lifecycle

JSF (Fases) So Atendidas pelo Reader Response e Restore Component Tree

Restore Component Tree: O conjunto de componentes JSF criado ou restaurado dependento da requisio (Primeira ou demais vezes executadas)

JSF (Fases) Apply request Values: Os componentes iro extrair seu novo valor dos parmetros da Request, colocando-os em variveis de estado no servidor

JSF (Fases)
Process Validations: todos os validadores sero executados, em caso de erro de qualquer valor, a mensagem alocada no FacesContext, caso contrrio ele atualiza (Update Model Values) os valores dos inputs na camada de negcio atravs da EL

JSF (Fases)
Invoke Application: Os mtodos do ManagedBeans so executados e as regras de navegao (Gravar, Excluir, Alterar,...) so resolvidas. Se tudo ocorrer bem renderizada pelo container do JSP, caso contrrio as mensagens gravadas no FacesContext so apresentadas

JSF (Fases)
Caso queira pular as fazer de validao e converso, basta utilizar o parametro immediate=true

<h:commandButton action=proximo" value=Proximo" immediate="true"/>

JSF JSF 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

JSF
faces-config.xml Arquivo XML para configurar recursos da aplicao Contm regras de navegao, customizao e extenso de converters, validators, componentes etc Geralmente est localizado dentro de /WEB-INF/faces-config.xml Pode ser dividido em diretrios e sub-diretrios ou dentro de arquivos jar Seta javax.faces.application.CONFIG_FILES no web.xml Ou ento coloca-se META-INF/faces-config.xml dentro de um jar

JSF
faces-config.xml (Resumo) <faces-config ... > <converter> <converter-id>core.faces.CnpfCnpjConverter</converter-id> <converter-class>converter.CnpfCnpjConverter</converter-class> </converter>

JSF
faces-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>

JSF
faces-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("Usurio 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 JSF
Atributos importantes: required, immediate, readonly, rendered .....

<h:inputText value="#{numberBean.userNumber}" required="true" validatorMessage="O nmero tem que ser entre 0 e 100" readonly=false" rendered=true > <h:commandButton value="Desistir" action="desistir" immediate="true"/>

Exerccio 1
Criar um cadastro de Pessoa. Criar um bean que represente o formulrio (Nome, Endereo, Telefone ) Usar f:view e h:form para os formulrios Especificar o Action Controller com o atributo de ao h:commandButton Criar uma Action para inserir os dados do formulrio, chame a lgica de negcio, guarde os resultados em uma lista e imprima os valores no console Usar o faces-config para declarar o form bean e navegao Aps inserir, imprimir no console quem foi inserido e enviar para uma pgina de sucesso com um boto voltar

Exerccio 1 (Continuao)
Validao: Utilizar o h:messages e h:message
<h:messages style="color: red"/>

Inserir algumas validaes nos campos:


<h:inputText value="#{user.name}" required="true" requiredMessage="Campo Obrigatorio" validatorMessage="Tamanho invlido"> <f:validateLength maximum="30" minimum="3"/> </h:inputText><br/>

Enviar uma mensagem de sucesso aps cadastrar o usurio


FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usurio 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()

Exerccio 2

Usando DataModel Inserir uma tabela no cadastro do exerccio 1 Criar um link para apagar o registro da tabela

Exerccio 3

Criar um evento de mudana em um combo. Criar um combo na tela de tipo de endereo Inserir os tipos (Rua, Quadra, Lote ....) Criar um mtodo para capturar essa mudana e imprimir no console o valor antigo e o novo

Exerccio 4 (Opcional)

Navegao: Sortear um nmero usando o Math.random()*100 Pedir para o usurio entrar com o nmero Se estiver certo, enviar para pgina de sucesso com opo de sair ou jogar novamente, se estiver errado avisar que est errado e informar se maior ou menor, o usurio pode desistir, enviando para uma tela confirmao.

Exerccio 4 (Opcional)

Navegao:

Exerccio 5 (Opcional)

Criar validadores: Validador de Nome, que s aceite seu nome. Validador de email Validador que no aceite data no passado.

Exerccio 5 (Opcional)

Criar validadores:
public class ValidatorNome implements Validator { @Override public 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 Invlido")); } }

Exerccio 6 (Opcional)

Criar conveter: Criar um objeto UF (cdigo e nome) Utiliz-lo em um combo Criar um converter para UF

Exerccio 6 (Opcional)

Converter:
public class UFConverter implements Converter { @Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) { if(StringUtils.isEmpty(value)){ return null; } UF uf = new UF(); if (value.equals("DF")) { <h:selectOneMenu value="#{user.uf}" uf.setCodigo(1); valueChangeListener="#{userAction.mudarUF}" onblur="submit()" uf.setNome("DF"); converter="ufConverter"> } else if (value.equals("SP")) { uf.setCodigo(3); <f:selectItems value="#{userAction.listaUF}" /> uf.setNome("SP"); </h:selectOneMenu> } else if (value.equals("GO")) { public List<SelectItem> getListaUF() { uf.setCodigo(3); uf.setNome("GO"); List<SelectItem> items = new ArrayList<SelectItem>(); } items.add(new SelectItem(new UF(1 , "DF"))); return uf; items.add(new SelectItem(new UF(2 , "SP"))); } @Override public String getAsString(FacesContext arg0, UIComponent arg1, Object value) { return value.toString(); }

items.add(new SelectItem(new UF(3 , "GO"))); return items; }

JSF 2.0

O que vem a com JSF 2.0

Suporte a templates, baseado no Facelets, Tiles, dentre outros Simplificar a criao de aplicaes do tipo CRUD Melhor tratamento de mensagens de erro Mecanismo de tratamento de excees padro Criao de aplicaes Web sem XML, utilizando anotaes Simplificao no desenvolvimento de componentes Especificar onde os artefatos (Conversores, Renderizadores, etc.) devem ser colocados no WAR, permitindo ao container encontr-los sem a necessidade de sua definio em arquivos de configurao Permitir que artefatos sejam alterados sem a necessidade de reinicializar o servidor

FIM

Você também pode gostar