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>
Figura-1 – O Nome do cavalo tem que ter no mínimo 3 caracteres
Figura-2 – O Valor do Lance não pode ser menor que o valor de R$ 10,00
Figura-3 – O Valor aposta só é valido para no máximo 3 corridas.
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.