Академический Документы
Профессиональный Документы
Культура Документы
FACELETS E LAYOUT CSS ............................................................................................................... 2 O ECLIPSE IDE..................................................................................................................................... 2 OBTENDO E INSTALANDO O ECLIPSE IDE ................................................................................ 2 O PLUG-IN JBOSS TOOLS ................................................................................................................. 3 INICIANDO NA PLATAFORMA ECLIPSE ..................................................................................... 3 BAIXANDO O JAVASERVER FACES .............................................................................................. 4 AS BIBLIOTECAS DO JAVASERVER FACES ............................................................................... 4 ADICIONANDO O JAVASERVER FACES AO PROJETO NO ECLIPSE IDE .......................... 5 ONDE BAIXAR O FACELETS ........................................................................................................... 6 CRIANDO UM PROJETO SIMPLES COM FACELETS ................................................................ 6 CRIANDO UM JAVABEAN .............................................................................................................. 11 O ARQUIVO FACES-CONFIG.XML ............................................................................................... 13 O ARQUIVO WEB.XML .................................................................................................................... 15 AS PGINAS DA APLICAO ........................................................................................................ 15
Pgina 1
www.integrator.com.br
O Eclipse IDE
O Eclipse IDE, chamado por muitos de Plataforma Eclipse, considerada por uma grande maioria de desenvolvedores Java como a melhor ferramenta para desenvolvimento dessa linguagem. Desenvolvido inicialmente pela IBM e liberado o cdigo fonte a comunidade, ao qual se criou a fundao Eclipse (Eclipse Foundation), sua grande vantagem, na atualidade, est no uso de seus assistentes de cdigo e grande gama de plug-ins, podendo se adaptar a qualquer situao de desenvolvimento. At o momento em que esse tutorial est sendo escrito, a verso mais atual do Eclipse a 3.3.
Figura 1 Seleo do Eclipse IDE que ser baixado na rea de downloads do site oficial
Pgina 2
www.integrator.com.br
Aps baixar, o arquivo compactado possui um diretrio chamado eclipse, contendo a estrutura que ser necessria para ser adicionada a instalao do Eclipse atual. Simplesmente cole sobre o diretrio eclipse original, obtido da descompactao anterior, que o sistema operacional se encarregar de adicionar os plug-ins existentes.
Pgina 3
www.integrator.com.br
www.integrator.com.br
1. jsf-api.jar 2. jsf-impl.jar Dois JARs JSTL: 1. jstl.jar 2. standard.jar Para torn-los disponveis em sua aplicao simples, bastando apenas colocar esses arquivos listados e no diretrio lib, encontrado em WEB-INF de sua aplicao Web. Porm, como vamos utilizar um ambiente de trabalho baseado em IDE, ser mais fcil essa configurao.
Com a biblioteca selecionada, clique no boto Add JARs. Selecione os arquivos JARs (jsf-api.jar e jsf-impl.jar) descompactados do JSF 1.2 que voc baixou no incio deste captulo. Confirme a caixa de dilogo Preferences.
Pgina 5
www.integrator.com.br
O Facelets
Voc pode baixar o Facelets na sua ltima verso no endereo oficial https://facelets.dev.java.net/. Na parte inferior do site, h o link downloadable from here.
Pgina 6
www.integrator.com.br
Digite TrabComFacelets no campo Project Name e altere para JSF 1.2 with Facelets em JSF Environment. Mantenha ento a opo FaceletsBlankWithoutLibs em Template e clique no boto Next.
Na terceira etapa ser necessrio adicionar um servidor ao Eclipse IDE. Clique no boto New, em Runtime. Na caixa de dilogo New Server Runtime, expanda Apache e selecione Apache Tomcat v6.0. Clique no boto Next para prosseguir.
Pgina 7
www.integrator.com.br
Em seguida, em Tomcat installation directory, clique no boto Browse e selecione o Tomcat instalado em sua mquina. Conclua a adio do Tomcat 6 atravs do boto Finish.
www.integrator.com.br
Assim que finalizar, a caixa de dilogo Open Associated Perspective sugira, perguntando se deseja abrir a perspectiva associada ao projeto. Clique no boto Yes para confirmar.
Pgina 9
www.integrator.com.br
Assim que finalizar, voc possui a biblioteca no projeto. Clique em J2EE Module Dependencies na lateral esquerda. Como a alterao no foi aplicada, a caixa de dilogo Setting Java Build Path surgir. Confirme no boto Apply para aplicar as alteraes. Observe que em J2EE Module Dependencies agora existe o JAR/Module JSF 1.2. Marque o checkbox e confirme.
Pgina 10
www.integrator.com.br
Criando um JavaBean
Clique com o direito do mouse sobre o projeto, na view Package, e selecione New > Class. Na caixa de dilogo New Java Class, digite Cadastro em Name. Altere Package para br.com.integrator (ou o nome do pacote que desejar). Conclua em Finish. Altere a classe como mostrado na Listagem 1 a seguir. Listagem 1 A classe Cadastro.java package br.com.integrator; public class Cadastro { private String nome; private String email; private String telefone; //get e set omitido }
Para adicionar os mtodos Getters e Setters no Eclipse, v ao menu Source > Generate Getters and Setters. Clique no boto Select All na caixa de dilogo Generate Getters and Setters e confirme.
Pgina 11
www.integrator.com.br
O Bean Cadastro possui apenas trs atributos necessrios, com os mtodos getters e setters, para que os valores sejam enviados pelos campos de um formulrio que ser criado adiante. Crie uma nova classe, a chame de Controle, e a coloque no pacote br.com.integrator.controller. Altere como mostrado na Listagem 2 a seguir: Listagem 2 A classe Controle public class Controle { private Cadastro cadastro; private List<Cadastro> cadList = new ArrayList<Cadastro>(); public Controle() { cadastro = new Cadastro(); } public Cadastro getCadastro() { return cadastro; } public void setCadastro(Cadastro cadastro) { this.cadastro = cadastro; } private void adicionar(Cadastro c){ cadList.add(c); } public DataModel getTodos() { return new ListDataModel(cadList); } public String novo(){ cadastro = new Cadastro(); return "cadastro"; } public String salvar( ) { this.adicionar(cadastro); FacesContext context = FacesContext.getCurrentInstance( ); FacesMessage message = new FacesMessage("Salvo com sucesso!"); context.addMessage(null, message); return "cadastrados";
Pgina 12
www.integrator.com.br
} }
Faa as importaes da classe com o atalho Ctrl + Shift + O . Com a inteno de simular um banco de dados nesse exemplo, voc cria na classe um List da classe Cadastro. Para salvar o cadastro, a pgina que ser criada chamar o mtodo salvar() que, por sua vez, chama o mtodo adicionar(), transmitindo como parmetro a instncia de Cadastro, que popular o List. A pgina que ser exibida aps o cadastro, exibir os dados salvos no List, atravs de uma tabela populada pelo mtodo getTodos(), que retorna um DataModel, da classe Controle.
O arquivo faces-config.xml
Para que o Facelets funcione em sua aplicao Web, necessrio configurar o arquivo facesconfig.xml com a seguinte linha: <application> <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> </application> Uma das grandes caractersticas de JavaServer Faces a sua flexibilidade. Ele desenhado com um nmero de interfaces plugveis, e uma delas ViewHandler. Ento necessrio adicionar um elemento <application/>, contendo o elemento <view-handler/> para que Facelets seja plugado ao JavaServer Faces. A classe principal para compilar o documento Facelets a SaxCompiler, encontrada no pacote com.sun.facelets.compiler. Quando o FaceletViewHandler inicializado, este instancia esta classe e usa como argumento para o construtor da classe DefaultFaceletFactory (com.sun.facelets.impl). Embora existam muitas classes em com.sun.facelets.compiler, basicamente, Facelets usa o SAXParser para analisar gramaticalmente os documentos XHTML. O FaceletViewHandler invocado em duas fases do ciclo de vida de JSF: Restaurar a apresentao e Renderizar a resposta. Na fase de Restaurao da Apresentao, a ViewHandler cria uma apresentao disponvel para processar em fases subseqentes. Aqui, o servlet Faces procura FacesContext para a requisio. Se FacesContext contm um UIRootView, o servlet Faces chama o mtodo restoreView de ViewHandler, que restabelece o estado da apresentao, armazenando o UIRootView em FacesContext e pegando o valor destes componentes que possuem ligaes em value. Se FacesContext no contm um UIRootView existente, o servlet Faces chama o mtodo createView de ViewHandler, o qual cria uma nova apresentao, renderizando a resposta e armazenando o UIRootView em FacesContext. At o final desta fase, FacesContext contm um UIRootView, que uma apresentao prvia restabelecida ou uma nova apresentao. Na fase de Renderizar a Resposta, o servlet Faces chama o mtodo renderView da classe ViewHandler, o que renderiza a resposta para o cliente para a atual apresentao selecionada e salva o estado da resposta para processamento em requisies posteriores. A ViewHandler renderiza a rvore
Pgina 13
www.integrator.com.br
de componente JSF e delega o estado salvo para a classe StateManager. Em ambas as fases, a ViewHandler delega a tarefa de restaurar e salvar o estado classe StateManager.
Nota: O Eclipse IDE, atravs do plug-in JBoss Tools, j adiciona esses elementos configurados em um projeto Facelets.
Para configurar o arquivo faces-config.xml por completo, voc precisa adicionar a classe Controle e determinar a navegao das futuras pginas. A Listagem 3 mostra as configuraes necessrias no arquivo faces-config.xml. Listagem 3 O arquivo faces-config.xml <managed-bean> <managed-bean-name>controle</managed-bean-name> <managed-bean-class> br.com.integrator.controller.Controle </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/cadastro.xhtml</from-view-id> <navigation-case> <from-outcome>cadastrados</from-outcome> <to-view-id>/cadastrados.xhtml</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/cadastrados.xhtml</from-view-id> <navigation-case> <from-outcome>cadastro</from-outcome> <to-view-id>/cadastro.xhtml</to-view-id> </navigation-case> </navigation-rule> ... A pgina cadastrados.xhtml ser exibida quando houver a string cadastrados. E cadastro.xhtml ser exibida quando houver a string cadastro.
Pgina 14
www.integrator.com.br
O arquivo web.xml
Para ter uma aplicao Web utilizando Facelets funcionando, necessrio tambm adicionar alguns elementos no arquivo web.xml. A principal informao adicionada no deployment descriptor para trabalhar com Facelets mostrado na Listagem 4 a seguir: Listagem 4 O arquivo web.xml <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> ...
Observando a configurao, voc percebe que o facelets vai utilizar o arquivo com extenso .xhtml para renderizar a pgina JSF, que tambm foi exibida na configurao do arquivo faces-config.xml.
As pginas da aplicao
Com o direito sobre o diretrio WebContent, no Eclipse IDE, na view Package, selecione New > XHTML File no menu de contexto. Na caixa de dilogo New File XHTML, digite cadastro no campo Name e clique no boto Next.
Pgina 15
www.integrator.com.br
Na segunda e ltima etapa da criao da pgina XHTML, voc tem uma srie de Taglibs que podem ser adicionadas a pgina que ser gerada. Marque JSF Core e JSF HTML e clique no boto Finish.
Uma pgina XHTML Facelets possui o seguinte cabealho: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
Pgina 16
www.integrator.com.br
Com os atributos xmlns:f e xmlns:h voc configura os valores para as tags Core e HTML do JSF. Altere a pgina cadastro.xhtml para o mostrado na Listagem 5 a seguir. Listagem 5 A pgina cadastro.xhtml <head> <title>Trabalhando com Facelets </title> <style> #cadastro{ margin:0; display:block; position: relative; height: auto; float: left; padding-bottom: 10px; } #cadastro fieldset{ padding-left: 25px; border: solid #CCCCCC 1px; margin: 0 auto; text-align: left; width: 350px; padding-bottom: 25px; } #cadastro legend{ font-weight: bold; font-size: 11pt; letter-spacing: 1px; padding-bottom: 10px; } html>body #cadastro legend{ margin-bottom: 0px; } #cadastro .field{ border-top: solid #333333 1px;
Pgina 17
www.integrator.com.br
border-left: solid #333333 1px; border-bottom: solid #CCCCCC 1px; border-right: solid #CCCCCC 1px; font-size: 13px; margin-bottom: 10px; color: #0E0659; } #cadastro label{ display: block; width: 80px; float: left; color: #000; border-bottom: 1px solid #f1f1f1; } #cadastro .msg{ padding-left: 5px; } #cadastro fieldset { width:400px; margin:0; padding:5px; } #cadastro dd span{ padding-left: 5px; } </style> </head> <body> <form jsfc="h:form"> <div id="cadastro"> <fieldset> <legend>Cadastro</legend> <label jsfc="h:outputLabel" for="nome"> Nome: </label> <input jsfc="h:inputText" type="text" id="nome"
Pgina 18
www.integrator.com.br
value="#{controle.cadastro.nome}" styleClass="field" required="true" /> <span jsfc="h:message" for="nome"> </span> <br /> <label jsfc="h:outputLabel" for="email"> E-mail: </label> <input jsfc="h:inputText" type="text" id="email" value="#{controle.cadastro.email}" styleClass="field" required="true" /> <span jsfc="h:message" for="email" > </span> <br /> <label jsfc="h:outputLabel" for="telefone"> Telefone: </label> <input jsfc="h:inputText" type="text" id="telefone" value="#{controle.cadastro.telefone}" styleClass="field" required="true" size="9" /> <span jsfc="h:message" for="telefone"> </span> <br /> <br /> <input jsfc="h:commandButton" type="submit" action="#{controle.salvar}" id="confirmar" value="Salvar"/> </fieldset> </div> </form> ...
Observando a Listagem 5, voc percebe que no precisamos da tag JSF <f:view/>, importantssima no desenvolvimento sem Facelets. A pgina feita em um (X)HTML comum, formatada com CSS, contendo em algumas tags apenas a injeo de alguns atributos. O atributo jsfc o que determina o componente JSF ao qual aquela tag pertence. Isso realmente facilita a vida de um designer que utiliza um programa diferente do Eclipse IDE, como por exemplo o Dremweaver. Dentro do atributo jsfc
Pgina 19
www.integrator.com.br
temos o que seria o incio da tag JSF. Por exemplo, um boto de envio em JSF criado pela tag <h:commandButton/> e em Facelets pode ser feito dessa forma ou injetado no (X)HTML, como valor do atributo jsfc, como por exemplo: jsfc= h:commandButton. Outros atributos especficos do JSF, como action, value, required e styleClass tambm so usados. Crie uma nova pgina e a chame de cadastrados.xhtml. Esta pgina exibir as informaes armazenadas no List da classe Controle. A Listagem 6 a seguir exibe a pgina cadastrados.xhtml. Listagem 6 A pgina cadastrados.xhtml <title>Trabalhando com Facelets </title> <style> .table-header{ padding: 5px; background-color: #CCC; color: #FFF; } .col-a{ } .col-b{ background-color: #EEE; } </style> </head> <body> <form jsfc="h:form"> <span jsfc="h:messages"></span> <table jsfc="h:dataTable" id="tabela" value="#{controle.todos}" var="item" cellpadding="0" cellspacing="0" headerClass="table-header" columnClasses="col-a, col-b" border="1"> <tr> <td jsfc="h:column"> <f:facet name="header"> <h:outputText value="Nome"/>
Pgina 20
www.integrator.com.br
</f:facet> <h:outputText value="#{item.nome}"/> </td> <td jsfc="h:column"> <f:facet name="header"> <h:outputText value="E-mail"/> </f:facet> <h:outputText value="#{item.email}"/> </td> <td jsfc="h:column"> <f:facet name="header"> <h:outputText value="Telefone"/> </f:facet> <h:outputText value="#{item.telefone}"/> </td> </tr> </table> <a jsfc="h:commandLink" action="#{controle.novo}"> Novo </a> </form> ...
Na pgina cadastrados.xhtml houve uma mistura de tags (X)HTML injetadas com atributos JSF e tags prprias do JSF. Dessa forma, podemos observar que tanto faz utilizar um modo como outro. Porm, como j foi dito, no caso do desenvolvedor estar trabalhando com um designer Web, os atributos JSF em tags (X)HTML sero bem mais aceitos, ajudando, inclusive, na limpeza do design da pgina.
Pgina 21
www.integrator.com.br
Pgina 22
www.integrator.com.br