Métodos de Validação em JSF - Parte IV

 

Validação Explícita Automática

A Validação Explícita Automática é útil quando você não quer deixar a validação de campos atada a lógica de negócio de uma aplicação e situações em que o que você precisa apenas é chegar um determinado tipo de dados, o valor mínimo ou máximo de um campo ou a quantidade de caracteres.

 

A implementação é muito parecida com a Validação Explícita Simples, exceto por:

 

Faz-se uso das tags <f:validadeLength/>, <f:validateDoubleRange/> e <f:validateLongRange/> do Java Server Faces.

Ex:

 

<h:inputText value="#{ApostaBean2.nome}"

 id="nome">

<f:validateLength minimum="5" maximum="16"/>

</h:inputText></TD>

 

O que significa que o campo nome deve ter no mínimo 5 e no máximo 16 caracteres.

 

web.xml

 

Não será necessário alterar o arquivo web.xml caso você tenha lido a terceira parte deste artigo, mas listarei ele novamente para quem não viu o artigo anterior, importante lembrar para quem ainda não tem experiência em desenvolvimento web, os arquivos web.xml e faces-config.xml devem ser criados na pasta WEB-INF do seu projeto.

 

<?xml version="1.0"?>   

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

    

  <servlet>

     <servlet-name>Faces Servlet</servlet-name>

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

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

  </servlet>

  <servlet-mapping>

     <servlet-name>Faces Servlet</servlet-name>

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

  </servlet-mapping> 

  <welcome-file-list>

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

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

  </welcome-file-list>

</web-app>

 

Não será necessário alterar a classe ApostaBean2.java  localizada no  pacote br.nitewing.claudio.validacoes., ainda assim listarei ela para quem não leu a parte 3 deste artigo, sendo possível assim testar o exemplo sem depender do anterior.

 

package br.nitewing.claudio.validacoes;

 

public class ApostaBean2 {

 

  private String nome;

  private String cavalo;

  private double valorAposta;

  private int quantJogos;

 

  public String getNome() { return(nome); }

  public void setNome(String nome) {

    this.nome = nome;

  }

 

  public String getCavalo() { return(cavalo); }

  public void setCavalo(String cavalo) {

    this.cavalo = cavalo;

  }

 

  public double getValorAposta() { return(valorAposta); }

  public void setValorAposta(double valoraposta) {

    this.valorAposta = valoraposta;

  }

 

  public int getQuantJogos() { return(quantJogos); }

  public void setQuantJogos(int quantjogos) {

    this.quantJogos = quantjogos;

  }

  public String apostar() {

    return("sucesso");

  }

}

 

O Método apostar() devolve a String sucesso que faz com que o usuário seja redirecionado para a pagina de confirmação caso não exista erro no preenchimento dos campos do form.

 

No arquivo faces-config.xml adicionaremos uma nova <navigation-rule> conforme mostrado com destaque no código abaixo.

 

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

  <managed-bean>

    <managed-bean-name>apostaBean2</managed-bean-name>

    <managed-bean-class>br.nitewing.claudio.validacoes.ApostaBean2

</managed-bean-class>

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

  </managed-bean>

 

  <navigation-rule>

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

    <navigation-case>

      <from-outcome>sucesso</from-outcome>

      <to-view-id>/WEB-INF/resultados/mostrarAposta1.jsp</to-view-id>

    </navigation-case>

  </navigation-rule>

 

  <navigation-rule>

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

    <navigation-case>

      <from-outcome>sucesso</from-outcome>

      <to-view-id>/WEB-INF/resultados/mostrarAposta2.jsp</to-view-id>

    </navigation-case>

  </navigation-rule>   

 

</faces-config>

 

Altere o arquivo index.jsp para chamar desta vez aposta2.faces.

 

<% response.sendRedirect("aposta2.faces"); %>

 

 

aposta2.jsp

 

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

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

<f:view>

     

      <HTML>

      <HEAD>

      <TITLE></TITLE>

      <style type="text/css">

.RED {

      font-weight: bold;

      color: red;

}

</style>

      </HEAD>

      <BODY>

      <div align="left">

      <h1>Corrida de Cavalos</h1>

      <h3>Façam suas apostas!</h3>

      </div>

      <h:form>

      <TABLE align="left"  width=600px border=1>

            <TR>

            <TD>Nome :</TD>

            <TD><h:inputText value="#{apostaBean2.nome}" id="nome">

            <f:validateLength minimum="5" maximum="16" />

            </h:inputText></TD>

            <TD><h:message for="nome" styleClass="RED" /></TD>

            </TR>

            <TR>

            <TD>Cavalo:</TD>

            <TD><h:inputText value="#{apostaBean2.cavalo}" id="cavalo">

            <f:validateLength minimum="3" />

            </h:inputText></TD>

            <TD><h:message for="cavalo" styleClass="RED" /></TD>

            </TR>

            <TR>

            <TD>Valor do Lance: R$</TD>

            <TD><h:inputText value="#{apostaBean2.valorAposta}"

                  id="valorAposta">

            <f:validateDoubleRange minimum="10.00" />

            </h:inputText></TD>

            <TD><h:message for="valorAposta" styleClass="RED" /></TD>

            </TR>

            <TR>

            <TD>Quantidade de Jogos:</TD>

            <TD><h:inputText value="#{apostaBean2.quantJogos}"

            id="quantJogos">

            <f:validateLongRange maximum="3" />

            </h:inputText></TD>

            <TD><h:message for="quantJogos" styleClass="RED" /></TD>

            </TR>

            <TR>

            <TH COLSPAN=3><h:commandButton value="Enviar o Lance!"

                  action="#{apostaBean2.apostar}" /></TH>

            </TR>

      </TABLE>

      </h:form>

</BODY>

</HTML>

</f:view>

 

 

mostrarAposta2.jsp

 

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

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

<f:view>

 

      <HTML>

      <HEAD>

      <TITLE>Lance Aceito</TITLE>

      </HEAD>

      <BODY>

      <div align="left">

 

      <H2>Lance feito com sucesso!</H2>

      </div>

      <UL>

            <LI>Nome : <h:outputText value="#{apostaBean2.nome}" /></LI>

            <LI>Cavalo Escolhido : <h:outputText

                  value="#{apostaBean2.cavalo}" /></LI>

            <LI>Valor do lance: R$<h:outputText

                  value="#{apostaBean2.valorAposta}" /></LI>

            <LI>Quantidade de Jogos: <h:outputText

                  value="#{apostaBean2.quantJogos}" /></LI>

      </UL>

 

      (Validação Explicita Automatica)

 

      </BODY>

      </HTML>

 

</f:view>

 

cvmvjsfp4fig01.jpg 

Figura-1 – O Nome do cavalo tem que ter no mínimo 3 caracteres

 

cvmvjsfp4fig02.jpg 

Figura-2 – O Valor do Lance não pode ser menor que o valor de R$ 10,00

 

cvmvjsfp4fig03.jpg 

Figura-3 – O Valor aposta só é valido para no máximo 3 corridas.

 

cvmvjsfp4fig04.jpg 

Figura-4 – Como podemos ver os campos e valores foram preenchidos corretamente, o que fez com que fosse mostrada a tela de sucesso.

 

Na quinta e última parte veremos como criar validadores personalizados no qual teremos um exemplo mais realista.