Bean Validation é a especificação definida pela JSR 349 para definição de restrições e validações de dados para a plataforma Java SE e EE. Sua implementação de referência é o Hibernate Validator.

Demonstração simples

editar

Será demonstrada uma simples validação de campo em página web que restringe o preenchimento de campo para valor não vazio.

Para atingirmos tal objetivo, utilizaremos uma página XHTML com um h:message apontando para um h:inputText vinculado a uma variável String de um Backing Bean. Essa variável será anotada com @NotNull. Ao submeter o formulário com o campo vazio, uma mensagem de validação será renderizada pelo servidor no componente h:message.

Para executar os seguintes códigos é necessário que o descritor de implantação web.xml esteja configurado para que campos vazios sejam convertidos em null ao invés do comportamento padrão de conversão em Strings vazias.

<context-param>
	<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
	<param-value>true</param-value>
</context-param>

No Bean abaixo a variável de referência String Nome é restringida com a anotação @NotNull para que não seja null.

package org.wikibooks.pt.javaee;

import javax.enterprise.inject.Model;
import javax.validation.constraints.NotNull;

@Model
public class Usuario {

	@NotNull	
	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
}

O XHTML abaixo gerará a página Web com o campo que sofrerá a validação.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
	<title>Conhecendo as restrições embutidas</title>
</head>
<body>
	<h:form id="formulario">
		<h:panelGrid columns="3" cellpadding="5">
			<h:outputLabel for="nome" value="Nome" />
			<h:inputText id="nome" value="#{usuario.nome}" />
			<h:message for="nome" />
			<h:panelGroup />
			<h:commandButton value="Enviar dados" style="float:right" />
		</h:panelGrid>
	</h:form>
</body>
</html>

Ao clicar no botão Enviar dados com o campo Nome em branco será exibida a mensagem não pode ser nulo.

 

É importante notar que apesar de a validação não permitir que a variável receba null, na instanciação do Bean String nome é inicializada com null como é padrão na plataforma Java SE. A primeira validação ocorre apenas quando é feita a primeira submissão dos dados do form.