Java Server Faces: Métodos de Validação – Parte 2

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (4)  (0)

Continuando com nosso artigo sobre métodos de validação em JSF, vamos ver um exemplo de Validação Manual.

 

Continuando com nosso artigo sobre métodos de validação em JSF, vamos ver um exemplo de Validação Manual.

 

cvjsfmvp2fig01.jpg 

Figura-1

 

O código de nosso aplicativo  esta comentado, é um aplicativo bem simples que simula um aplicação de venda de Títulos de aplicação, ela não é um exemplo real, mas o seu objetivo é você entender como se ocorre a validação manual.

 

Primeiro crie um projeto web em sua IDE preferida, e vamos criar dois arquivos com extensão .jsp, chame o primeiro de index.jsp e o segundo de cap1,jsp como na Figura-1 mostrada anteriormente.

 

É importante lembrar que como estou usando eclipse, com os plugins Sysdeo para Tomcat, e Amateras HTML e Amateras Faces IDE, estrutura do projeto pode parecer estranha para usuários do WTP ou ainda para usuários do Netbeans, mas isso não chega a ser um problema, pois o exemplo funcionara se você tiver os  jars  do myfaces na sua aplicação no classpath da sua aplicação como mostrada  na Figura-2, não usamos o Tomahawk em nossa aplicação mas o plugin Amateras Faces adiciona tambem coloca ele na aplicação por padrão, no Eclipse você pode baixar o eclipse 1.1.5 que é a versão utiliza em nosso artigo ou uma mais nova, e colocar na pasta lib de sua aplicação,  caso esteja usando o eclipse com Exadel, Lomboz ou algum outro plugin é só pedir para adicionar JSF capabilities, já no Netbeans você pode escolher um projeto web e marcar o frame java server faces quando estiver criando um projeto web pois o código aqui apresentando é totalmente compatível com a especificação da Sun e não usamos componentes do Tomahawk.

 

cvjsfmvp2fig02.jpg 

Figura-2

 

código do index.jsp

 

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>Validação Manual</title>

</head>

<body>

<h1>Metódos de Validação</h1>

<a href="cap1.jsf"> Validação Manual</a><br>

</body>

</html>

 

Agora crie o arquivo cap1.jsp:

 

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

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

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<f:view>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<TITLE>Exemplo de Validação Manual</TITLE>

 

<LINK REL="STYLESHEET"

      href="./css/styles.css"

      TYPE="text/css">

</HEAD>

<BODY>

<CENTER>

<h1>Capitalização NossaCap</h1>

 

<h:form>

  <h:outputText value="#{capBean1.errorMessages}"

                escape="false"/>

  <TABLE width="350px">

  <TR>

    <TD>Nome Titular:

    </TD>

    <td align="right"><h:inputText value="#{capBean1.userID}"/></td>

    </TR>

 

    <TD>Valor Aplicado(R$):

    </TD>

    <td align="right"><h:inputText value="#{capBean1.bidAmount}"/></td>

    </TR>

  <TR>

    <TD>Vigência do Titulo:

    </TD>

    <td align="right"><h:inputText value="#{capBean1.bidDuration}"/></td>

    </TR>

  <TR><Td colspan="2" align="right">

      <h:commandButton value="Confirmar!"

                       action="#{capBean1.doCap}"/></Td></TR>  </TABLE>

</h:form>

</CENTER></BODY></HTML>

</f:view>

 

Agora vamos criar o Backbean CapBean1 que será responsável pela validação de campos submetidos pelo usuário.

 

CapBean.java

 

package validacoes;

//Essa classe faz parte do pacote validacoes

 

import java.util.ArrayList;

 

public class CapBean1 {

  private String userID = "";

  private String bidAmount;

  private double numericBidAmount = 0;

  private String bidDuration;

  private int numericBidDuration = 0;

/* As mensagens de erro serão armazenadas em um ArrayList

 * Observe que o nosso código é adaptado para o Java 5

 * podendo ser rodado sobre um JVM 1.4 com algumas adaptações

 * no código.

 */

  private ArrayList<String> errorMessages = new ArrayList<String>();

 

  // Agora definiremos o metódos get e Set do Managed Bean CapBean1.java

 

  public String getUserID() { return(userID); }

 

  public void setUserID(String userID) {

    this.userID = userID.trim();

  }

 

  public String getBidAmount() { return(bidAmount); }

 

  public void setBidAmount(String bidAmount) {

    this.bidAmount = bidAmount;

    /* é feita a conversão da String recebida e armazenada no objeto

     numericBidAmout que é do tipo double

     */

    try {

      numericBidAmount = Double.parseDouble(bidAmount);

    } catch(NumberFormatException nfe) {}

  }

 

  public double getNumericBidAmount() {

    return(numericBidAmount);

  }

 

  public String getBidDuration() { return(bidDuration); }

 

  public void setBidDuration(String bidDuration) {

    this.bidDuration = bidDuration;

    /* é feita a conversão da String recebida e armazenada no objeto

    numericBidAmout que é do tipo int */

    try {

      numericBidDuration = Integer.parseInt(bidDuration);

    } catch(NumberFormatException nfe) {}

  }

 

  public int getNumericBidDuration() {

    return(numericBidDuration);

  }

  /* Este'é o método getErrorMessages() que verifica as mensagens de erros

   * no objeto ArrayList errorMessages e devolve a variavel tipo  String

   * message concatenada.

   * */

  public String getErrorMessages() {

    String message;

    if (errorMessages.size() == 0) {

      message = "";

    } else {

      message = "<FONT COLOR=RED><B><UL>\n";

      for(int i=0; i<errorMessages.size(); i++) {

        message = message + "<LI>" +

                 (String)errorMessages.get(i) + "\n";

      }

      message = message + "</UL></B></FONT>\n";

    }

    return(message);

  }

  /*O metódo doBid() é responsável por fazer as validações

   * dos campos e quando encontra um erro adiciona na ArrayList

   * errorMessages, caso não encontre error, retorna uma mensagem

   * de sucesso (success).

   * */

  public String doCap() {

    errorMessages = new ArrayList<String>();

    if (getUserID().equals("")) {

      errorMessages.add("Nome do titular não foi preenchido");

    }

   

    if (getNumericBidAmount() < 20.00) {

      errorMessages.add("O valor investido deve ser de no mí­nimo R$20.00");

    }

    if (getNumericBidDuration() < 60) {

      errorMessages.add("o prazo mí­nimo de investimento é de 60 dias.");

    }

    if (errorMessages.size() > 0) {

      return(null);

    } else {

      return("success");

    }

  }

}

 

Crie na pasta WEB-INF a pasta results e dentro dela crie mais um arquivo jsp, chame o de mostraCap1.jsp que caso a submissão do formulário retorne sucesso, sera exibido ao usuário com a confirmação da concretização da transação.

 

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

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

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<f:view>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD><TITLE>Transação efetuada com sucesso!</TITLE>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<LINK REL="STYLESHEET"

      href="./css/styles.css"

      TYPE="text/css">

</HEAD>

<BODY>

<CENTER>

  <h1>Transação Efetuada com sucesso!</h1>

 

<H2>Por favor imprima uma cópia desse comprovante.</H2>

<UL>

  <LI>Nome Titular: &nbsp; <h:outputText value="#{capBean1.userID}"/>

 

  <LI>Valor do investido: &nbsp; R$ &nbsp;<h:outputText value="#{capBean1.bidAmount}"/>

  <LI>Vigência: &nbsp; <h:outputText value="#{capBean1.bidDuration}"/>

</UL>

</CENTER></BODY></HTML>

</f:view>

 

Crie na pasta css o  arquivo styles.css:

 

BODY { background-color: #FFFFFF }

A:hover { color: red }

H2 {

      color: #440000;

      text-align: center;

      font-family: Arial, Helvetica, sans-serif

}

TH.TITLE   { background-color: #EF8429;

             font-size: 28px;

             font-family: Arial, Helvetica, sans-serif;

}

.WHITE {

    color: white;

    font-family: Arial, Helvetica, sans-serif;

    font-size: 80%;

    font-weight: bold;

    text-decoration : none;

}

.DARK { background-color: black;

}

.RED { font-weight: bold;

       color: red;

}

 

Agora vamos configurar os arquivos faces-config.xml e web.xml:

 

Este é o web.xml:

 

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

 

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">

 

  <display-name>validacao</display-name>

 

  <!-- servlet -->

  <servlet>

    <servlet-name>FacesServlet</servlet-name>

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

  </servlet>

 

  <!-- servlet-mapping -->

 

  <servlet-mapping>

    <servlet-name>FacesServlet</servlet-name>

    <url-pattern>*.jsf</url-pattern>

  </servlet-mapping>

 

  <!-- The Usual Welcome File List -->

    <welcome-file-list>

      <welcome-file>index.jsp</welcome-file>

      <welcome-file>index.html</welcome-file>

    </welcome-file-list>

 

</web-app>

 

Este é o faces-config.xml :

 

<?xml version="1.0"?>

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

 <managed-bean>

    <managed-bean-name>capBean1</managed-bean-name>

    <managed-bean-class>validacoes.CapBean1</managed-bean-class>

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

  </managed-bean>

  <navigation-rule>

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

    <navigation-case>

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

      <to-view-id>/WEB-INF/results/mostraCap1.jsp</to-view-id>

    </navigation-case>

  </navigation-rule> 

</faces-config>

 

Observe que em managed-bean-name nós indicamos o nome capBean1 e fizemos referencia a ele nas tags jsf das paginas cap1.jsp e mostracap1.jsp.

 

Em managed-bean-class nós informamos o caminho completo até a classe CapBean1 e o pacote ao qual ele faz parte.

 

em navigation-rule informamos que a partir de cap1.jsp sera esperado uma resposta de sucesso que ao ocorrer exibirá mostraCap1.jsp ao usuário. Importante frisar que essas paginas em tempo de execução serão chamadas com a extensão .jsf que mapeamos no arquivo web.xml.

 

Como pode ver em CapBean1.java todo a lógica esta praticamente no classe java, inclusive a validação dos campos, poderíamos ter usado javascript para validar dos dados no cliente, apesar de que um usuário poderia facilmente desativar o suporte ao javascript do navegador em questão, poderíamos também utilizar triggers(gatilhos), funções  e stored procedures (procedimento armazenados) para fazer a validação dos campos, correndo apenas o risco de perder talvez a portabilidade da aplicação de um banco para outro, por exemplo você desenvolveu em HSQLDB em desenvolvimento e precisar mudar para um Oracle ou um SQL Server e ai teria que reprogramar tudo de novo, o ideal nesses casos é definir o banco a ser usado desde o início, o importante é frisar é que em nossa aplicação de exemplo caso fosse necessário atualizar as o prazo mínimo de vigência ou o valor minimo de investimento seria necessário mexer no código da aplicação, talvez o uso de um arquivo de propriedades ajudasse pois seria  necessário alterar o arquivo mas na vida real essa informação estaria em um banco de dados ainda assim a validação manual é desaconselhável.

 

Nas figuras vemos a aplicação sendo executada:

 

digite o seguinte endereço em seu navegador: http://localhost:8080/validacao/

 

cvjsfmvp2fig03.jpg 

Figura-3

 

cvjsfmvp2fig04.jpg 

Figura-4

 

cvjsfmvp2fig05.jpg 

Figura-5

 

cvjsfmvp2fig06.jpg 

Figura-6

 

cvjsfmvp2fig07.jpg 

Figura-7

 

cvjsfmvp2fig08.jpg 

Figura-8

 

Na próxima parte desta série de artigos veremos exemplos de validação explícita, até lá.

 

Sobre este artigo:

IDE utilizada: Eclipse 3.3 (com Plugins Amateras faces,Amateras HTML e Sysdeo)

Versão do Bd: Não se aplica

Navegadores Utilizados: Firefox 2.x, Opera 9.x

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?