Validação com Vraptor

Estou tendo problemas ao validar os campos do formulário. As mensagens de erro não aparecem na tela de login.

<h3>Login</h3>
<br>
<c:if test="${not empty texto}">
	<fmt:message key="${texto}" />
	<c:set var="texto" value="" />
</c:if>
<br>
<form action="${linkTo[LoginController].logar}" method="post">
	<fmt:message key="label.email" />:<br />
	<input type="text" name="login.email" class="input" size="20" tabindex="10" value="${login.email}" />
	<br>
	<fmt:message key="label.senha" />:<br />
	<input type="password" name="login.senha" class="input" size="20" tabindex="20" />
	<br>
	<input type="submit" value="<fmt:message key='botao.logar' />" tabindex="100" />
</form>

LoginController

.....
@Get("/")
public void login() {
	
}

@Post("/logar")
public void logar(final Login login) {

	validator.checking(new Validations(localization.getBundle()) { {
		that(login.getEmail() == null, "texto", "erro.email_vazio");
		that(login.getSenha() == null, "texto", "erro.senha_vazia");
	} });

	validator.onErrorUsePageOf(LoginController.class).login();
	
	result.of(InicioController.class).inicio();

}

Por que é necessário marcar o parâmetro do método logar como final? Quando tiro o final ele dá um erro no eclipse.

pra mostrar os erros vc precisa iterar pela variável ${errors}, como vc pode ver no final dessa página:
http://vraptor.caelum.com.br/pt/docs/validacao/

e esse final é obrigatório sim, pq vc está usando dentro de uma classe anônima (esse bloco dentro do validations)

Isso mesmo que o Lucas falou.

O local onde você está passando a String “texto” é a categoria do erro e não o nome que ficará disponível na EL do seu JSP. O que estará disponível é a variável errors.