Validação de formulários com jQuery e VRaptor

É comum o uso de bibliotecas JS e plugins jQuery para validar campos em formulários HTML. Contudo, por vezes esse tipo de validação não atende às necessidades do desenvolvedor, seja por expor o procedimento de validação, por uma necessidade de acessar dados de uma base de dados ou por qualquer outro motivo que justifique a utilização da codificação dessa regra diretamente em classes JAVA.

Nesse post, será demonstrado de forma simples como levar a validação de campos para dentro do contexto de execução JAVA de uma aplicação Java WEB que utiliza VRaptor.

Como já foi demonstrado em posts anteriores, o VRaptor traz uma simplicidade muito grande para tratamento de eventos AJAX, e por isso a solução implementada não exigiu muita codificação, nem qualquer tipo de configuração além da padrão dos projetos desse framework.

A imagem a seguir mostra o fluxo disparado a cada modificação de um campo com um método de validação.

Passos para configurar o ambiente:

1 – Instalação

Para utilizar a validação por AJAX você deve incluir o arquivo CSS validation.css e os arquivos JS jquery-1.4.4.min.js e jquery.vraptor.validate.js, que estão disponibilizados para download ao final desse post, no HEAD da sua página.

Exemplo:

<link href="http://k2cloud.net/vraptor/common/css/validation.css" rel="stylesheet" type="text/css" media="all">
<script src="http://k2cloud.net/vraptor/common/js/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="http://k2cloud.net/vraptor/common/js/jquery.vraptor.validate.js" type="text/javascript"></script>

2 – Configuração do formulário

Após adicionar os arquivos, você precisa adicionar ao seu form a classe validate. Essa classe será o gatilho para que as funções JS interceptem o formulário cada vez que ele for submetido e verifiquem se existem mensagens de erro nos campos do mesmo.

Além da configuração do formulário, cada campo deve ser anotado com a mesma classe validate, assim você poderá definir quais os campos do formulário deverão ser validados.

Como a validação é feita diretamente em um Controller do VRaptor, nos campos do formulário será adicionado atributo alt, presente na tag INPUT, contendo o path do método responsável pela validação.

Pronto, a configuração da página JSP está concluída e abaixo segue o código do formulário deste exemplo:

<form class="validate" action="<c:url value="/validate/save"/>" method="post">
	<p>
	<label>E-mail:</label>
	<input type="text" class="validate"alt="/validate/email/"/>
	</p>

	<p>
	<label>Number:</label>
	<input type="text" class="validate"alt="/validate/number/"/>
	</p>

	<p>
	<label>Length:</label>
	<input type="text" class="validate"alt="/validate/lenght/"/>
	</p>

	<p>
	<input type="submit" value="Submit">
	</p>
</form>

3 – Criação de um método de validação

Nesse caso, criamos o controller ValidationController com 3 métodos de validação, um para campo do formulário. Por serem validações bem simples de e-mail, campo numérico e número de caracteres do campo, a explicação será suprimida e, abaixo, você poderá ver a implementação completa da classe.

import static br.com.caelum.vraptor.view.Results.json;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

@Resource
public class ValidationController {

private final Result result;

public ValidationController(Result result) {
this.result   = result;
}

@Path("/validate")
public void page() {

}

@Post
@Path("/validate/save")
public void save() {
result.include("retorno", "passou");
result.redirectTo(ValidationController.class).page();
}

@Path("/validate/email/{value}")
public void emailValidate(String value) {
boolean success = false;
if(value.contains("@") && value.contains(".")
&& value.lastIndexOf(".") > value.indexOf("@")) {
success = true;
}
result.use(json()).from(success).serialize();
}

@Path("/validate/number/{value}")
public void numberValidate(String value) {
boolean success = false;
try {
new Double(value);
success = true;
} catch (Exception e) {
//e.printStackTrace();
}

result.use(json()).from(success).serialize();
}

@Path("/validate/lenght/{value}")
public void lenghtValidate(String value) {
boolean success = false;
if(value.length() >= 5 && value.length() <= 10) {
success = true;
}
result.use(json()).from(success).serialize();
}
}

É isso. Concluídos esses 3 passos, o sistema já estará pronto para validar os formulários diretamente no controller.


Share on Facebook

Responses to Validação de formulários com jQuery e VRaptor

  1. Olá Daniel,

    Gostei do post. Bem fácil de entender o conceito.

    Parabén pelo design desse blog e do site da K2studio.

    Abraço,
    Luiz

  2. Thiago disse:

    Muito legal o conceito!

    Principalmente por ser unobstrusive! Porém eu acho que validações simples do tipo tamanho do campo e se é e-mail ou não deveria ser feito por client-side mesmo…

  3. daniel disse:

    Obrigado Thiago. A idéia é exatamente essa, usar esse tipo de validação somente em casos que a regra precise de consultas no banco ou coisas do tipo.

Post a comment