JavaServer Faces a primeira vista

 

Saudações Java!

 

Talvez você já tenha ouvido falar em JavaServer Faces e ainda não tem nenhum contato com este Framework da Sun Microsystems. Neste artigo irei mostar como utilizar JSF através de uma configuração manual, ou seja, sem o uso de IDE. Assim, você saberá exatamente aonde está mexendo e que arquivo deve manipular, mas isto não lhe empede de utilizar alguma IDE como o NetBeans IDE, pois ele já faz isto de forma automática.

 

JavaServer Faces (JSF), é uma tecnologia de Java do mundo EE(Enterprise Edition), é projetado para simplificar o desenvolvimento de aplicações Web. JSF é utilizado  para construir interface do usuário e páginas, e conectar esses componentes a objetos de negócio de forma mais elegante e fácil. Também automatiza o processo no uso de JavaBeans e navegação de páginas.

 

Por que JavaServer Faces?

No contexto de aplicações Web, a aparência é determinada pelas TAGS HTML que específicam o layout. A lógica de negócios é implementada no código Java, onde determina o comportamento da aplicação.

 

Algumas tecnologias web, misturam HTML e código do negócio. Isto parece atraente por tornar fácil a produção de aplicações simples em um único arquivo, mas para aplicações sérias, misturar HTML e código, cria problemas consideráveis.

 

Quando você utiliza JavaServer Faces, você já está usando um padrão muito famoso chamado Model-View-Controller onde Faces separa a lógica de negócios da visualização e requisição. O model sendo seus JavaBeans, a visualização ou apresentação seria as JSPs utilizando as EL expression language e por fim o Controlador sendo o seu sistema de navegação, onde a navegação entre suas páginas é toda mapeada.

 

JavaBeans

JavaBean é uma classe que expõe propriedades( atributos ) e eventos(métodos) a um ambiente como JSF.

 

Uma propriedade é um valor nomeado de um determinado tipo que pode ser lido e/ou escrito. O modo mais simples para definir uma propriedade é usar uma convenção de nomeclatura padrão para leitura e escrita de métodos, isto é, a convenção de get/set.

 

A primeira letra do nome da propriedade é mudada para maiúscula dentro nome do método.

 

Ex:

private String nome;

 

public String getNome(){

return nome;

}

public void setNome( String nome ){

this.nome = nome;

}

 

JSF Pages

Para a criação de páginas que utilizam JSF como framework, você deve utilizar páginas com a extenção .jsp e na chamada do navegador utilizar:

http://localhost:8080/jsfapp/index.jsf

http://localhost:8080/jsfapp/index.faces

http://localhost:8080/jsfapp/faces/index.jsp

 

Isto depende de como você irá configurar o web.xml de sua aplicação. Para o exemplo que irei mostrar, vou utilizar a configuração para acessar a aplicação com a extenção .jsf.

 

Suas páginas devem iniciar com a declaração da biblioteca de tags.

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

 

Você precisa do f:view  tag para renderizar suas páginas. E a HTML tag para inserir componentes html em sua página.

 

Ex:

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<f:view>

<h:outputText id=”hello” value=”Welcome !!!” />

</f:view>

 

Requerimento

Ok, para começar a desenvolver aplicativos web com JSF, você precisa dos seguintes pacotes:

Java SDK 1.4.1 ou posterior (http://java.sun.com/j2se).

Um containter servlet: Apache Tomcat (http://jakarta.apache.org/tomcat/).  Você pode rodar aplicações JSF com qualquer container servlet que tem suporte especificações Servlet 2.3 e JSP 1.2.

JavaServer Faces reference implementation (http://java.sun.com/j2ee/javaserverfaces )

 

Assumiremos que você já instalou o Java SDK e que já está familiarizado com as ferramentas do SDK. Portanto, irei apenas repassar como instalar o Tomcat.

 

Após ter baixado o tomcat, descompacte-o por exemplo em:

C:\apache-tomcat

 

Para inicializar o Tomcat, utilizando o windows execute o arquivo startup.bat localizado no diretório /bin do Apache Tomcat. Para testar se o tomcat está rodando, acesse: figura 01 http://localhost:8080

 

jsfprimvistafig01.JPG

Figura 01. Tela de inicialização do Tomcat

 

Pronto! Para desligar o servidor basta você executar o arquivo shutdown.bat localizado no diretório /bin.

 

Exemplo: Enviando E-mails com Autenticação de usuário com JavaServer Faces.

Neste exemplo irei abordar algumas funcionalidades de JSF, utilizando o envio de e-mail onde você irá se autenticar no seu servidor de e-mail.

 

Configurando a aplicação

Dentro da pasta webapps do tomcat, crie uma pasta chamada jsfapp onde essa será o contexto da nossa aplicação.

 

A estrutura do diretório vai ficar assim:

C:\jakarta-tomcat\webapps\jsfapp -> NOSSA APLICAÇÃO, PAGES

C:\jakarta-tomcat\webapps\jsfapp\WEB-INF -> NOSSOS ARQUIVOS DE CONFIGURAÇÃO

C:\jakarta-tomcat\webapps\jsfapp\WEB-INF\classes -> NOSSAS CLASSES

C:\jakarta-tomcat\webapps\jsfapp\ WEB-INF\lib -> NOSSA BIBLIOTECA DE TAGS

 

Adicionaremos os seis JSF jar’s e os dois JSTL jar’s na pasta lib da nossa aplicação.

 

commons-beanutils.jar, commons-collections.jar, commons-digester.jar, commons-logging.jar, jsf-api.jar, jsf-impl.jar, jstl.jar e standard.jar

 

Também  precisaremos baixar algumas bibliotecas para a utilização do nosso sisteminha de email.

 

Faça o download do JavaMail em:

http://java.sun.com/products/javamail/downloads/index.html

No pacote zipado você vai precisar dos jar’s:

mail.jar

dns.jar

imap.jar

mailapi.jar

pop3.jar

stmtp.jar

 

JavaBeans Activation Framework - JAF em:

http://java.sun.com/products/javabeans/jaf/downloads/index.html

activation.jar

 

Commons Mail da Apache Jakarta em:

http://jakarta.apache.org/commons/email/

commons-email-1.0.jar

 

Para uma melhor organização, crie uma pasta em um diretório isolado onde você não irá alterar a existência dos arquivos e coloque-os lá:

Ex: C:\Tools4J

 

Não esqueça que esses jar’s devem ficar na pasta lib da aplicação jsfapp

 

Agora vamos criar nossos objetos para representar nosso sistema de e-mail. Para fins didáticos iremos colocar nosso método de negócio dentro da mesmo JavaBean.

 

Listagem 01 Email.java

package mail;

import org.apache.commons.mail.*;

/**

*

* @author Wendell Miranda

*/

public class Email {

 

private final String SUCCESS = "success";

private final String FAILURE = "failure";

 

private static String host = "SMTP";

private static String from = "SEU_EMAIL";

 

private String nome;

private String email;

private String titulo;

private String mensagem;

 

 

/** Creates a new instance of Email */

public Email() {

}

 

public String getNome() {

return nome;

}

 

public void setNome(String nome) {w

this.nome = nome;

}

 

public String getEmail() {

return email;

}

 

public void setEmail(String email) {

this.email = email;

}

 

public String getTitulo() {

return titulo;

}

 

public void setTitulo(String titulo) {

this.titulo = titulo;

}

 

public String getMensagem() {

return mensagem;

}

 

public void setMensagem(String mensagem) {

this.mensagem = mensagem;

}

 

/*Neste método, se enviar a mensagem, o usuário será direcionado para a página ok.jsp

Ou, se ocorrer alguma exceção durante o envio, ele será redirecionado para a mesma, através do OUTCOME failure. Você poderia utilizar qualquer nome para o OUTCOME. */

 

public String enviar()throws Exception  {

try{

HtmlEmail email = new HtmlEmail();

email.setHostName( host );

email.setAuthentication("USUARIO_DO_EMAIL","SENHA");

email.addTo( getEmail() );

email.setFrom( from ,"CONTATO: "+getNome());

email.setSubject( getTitulo() );

email.setHtmlMsg( getMensagem() );

email.send();

}catch( Exception e ){

e.printStackTrace();

return FAILURE;

}

return SUCCESS;

 

}

}

 

Devemos configurar nosso arquivo de navegação chamado faces-config.xml onde iremos declarar nosso objeto e mapear nossa navegação. Nossas páginas devem ser declaradas com a extenção .jsp

 

Listagem 02 faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

 

<!DOCTYPE faces-config PUBLIC

"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"

"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

 

<faces-config>

 

<navigation-rule>

<from-view-id>/envia.jsp</from-view-id>

<navigation-case>

<from-outcome>success</from-outcome>

<to-view-id>/ok.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>failure</from-outcome>

<to-view-id>/envia.jsp</to-view-id>

</navigation-case>

</navigation-rule>

 

<managed-bean>

<managed-bean-name>mail</managed-bean-name>

<managed-bean-class>mail.Email</managed-bean-class>

<managed-bean-scope>request</managed-bean-scope>

</managed-bean>

 

</faces-config>

 

Devemos criar nossas pages JSF para que possamos testar nossa aplicação. A página Envia.jsp contém elementos JSF( EL ) que vinculam suas propriedades através da configuração do managed-bean no faces-config . Note que o nome do managed-bean é mail, e suas propriedades são acessadas através do ponto(.)

 

Nosso escopo é request, pois devemos definitivamente evitar o uso de escopo session. Se você utilizar o escopo session, todo o objeto requisitado vai ficar na sessão( Imagine muitos usuários acessando a sua aplicação ?!).

 

Listagem 03 Envia.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

 

<f:view>

<h:form>

NOME: <h:inputText id="nome" value="#{mail.nome}" /></br>

E-MAIL: <h:inputText id="email" value="#{mail.email}" /></br>

TITULO: <h:inputText id="titulo" value="#{mail.titulo}" /></br>

MENSAGEM: <h:inputTextarea id="mensagem" rows="8" cols="40" value="#{mail.mensagem}" /></br></br>

<h:commandButton value="Enviar" action="#{mail.enviar}" />

</h:form>

</f:view>

 

Listagem 04 ok.jsp

Nossa página de confirmação onde irá obter os valores informados pelo usuário, através do método get.

 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

 

<f:view>

<h2>Mensagem Enviada!!!</h2>

NOME: <h:outputText id="nome" value="#{mail.nome}" /></br>

E-MAIL: <h:outputText id="email" value="#{mail.email}" /></br>

TITULO: <h:outputText id="titulo" value="#{mail.titulo}" /></br>

MENSAGEM: <h:outputText id="mensagem" value="#{mail.mensagem}" /></br></br>

</f:view>

 

Conclusões

Nos próximos artigos irei falar mais sobre JSF e suas funcionalidades, como Eventos, Conversão e Validação. Também vou demonstrar a utilização do Netbeans IDE para a criação de aplicações web, utilizando Faces e JPA (Java Persistence API).

 

Bom, é isso ! Espero que alguém que esteja começando a utilizar JavaServer Faces, esse tutorial lhe ajude a esclarecer alguma dúvida.  Qualquer dúvida fique a vontade para fazer contato e trocar algumas idéias ;-)

 

Segue o código fonte e o WAR da aplicação para você acompanhar o artigo.

 

Referências

Core JavaServer Faces - http://www.horstmann.com/corejsf/