BT
x Por favor preencha a pesquisa do InfoQ !

VRaptor 3

Postado por Lucas Cavalcanti em 16 Out 2009 |

O VRaptor3 é um framework MVC em Java focado no desenvolvimento rápido e simples, e na fácil manutenção do código. Usando muitas idéias e boas práticas que surgiram nos últimos anos, como Convenção sobre Configuração, Injeção de Dependências e um modelo REST, você pode fazer sua aplicação com este framework de uma maneira bastante agradável e produtiva. É também uma iniciativa brasileira, nascida dentro da Universidade de São Paulo, usada em muitas empresas.

Após configurar o filtro do VRaptor3 e o pacote básico da sua aplicação no seu web.xml, você já pode começar a fazer sua aplicação, bastando indicar os objetos que você quer que sejam acessíveis via URIs através da anotação @Resource. Imagine que queremos fazer um simples CRUD de artigos para o InfoQ, começando então pelo nosso controller:

@Resource
public class ArtigosController {

	public List lista() {
		// código para listar os artigos
		// retornando do dao, por exemplo
	}
}

A seguinte convenção é usada: o método lista() da classe ArtigosController vai tratar a URI /artigos/lista. Ao final do método seremos despachados para /WEB-INF/jsp/artigos/lista.jsp e teremos o seu retorno, que é uma lista de artigos, disponível num atributo artigoList. Essas convenções podem ser alteradas, se desejado!

O VRaptor3 roda dentro de um container de injeção de dependências, por padrão o Spring. Dessa forma você pode receber as dependências da sua classe no construtor e o VRaptor se encarrega de usá-las para instanciar suas classes. Tudo o que você precisa para isso é registrar essas dependências com a anotação @Component:

@Component
public class ArtigoDao {
	//...
}

@Resource
public class ArtigosController {

	private final ArtigoDao dao;

	public ArtigosController(ArtigoDao dao) {
		this.dao = dao;
	}

	public List lista() {
		return dao.listaTodos();
	}

}

Suas classes anotadas com @Component também podem receber dependências no construtor, desde que estejam também registradas no VRaptor. Se você não quiser usar a convenção do VRaptor para algum método do seu Controller, você pode sobrescrevê-la de maneira bem fácil. Por exemplo, para mudar a URI que chama o método você pode usar a anotação @Path em cima do método:

@Resource
public class ArtigosController {
	//...
	@Path("/artigos")
	public List lista() {
		return dao.listaTodos();
	}

}

Muitas vezes não queremos ir para a página padrão do método, como por exemplo, após adicionar um artigo pode ser melhor voltar para a listagem de artigos. Para isso podemos receber no construtor do ArtigosController um objeto do tipo Result, que é um componente do VRaptor que consegue mudar o resultado do seu método.

import static br.com.caelum.vraptor.view.Results.logic;
@Resource
public class ArtigosController {

	private final Result result;
	//...

	public ArtigosController(ArtigoDao dao, Result result) {
		this.result = result;
		this.dao = dao;
	}
	//...
	@Path("/artigos")
	public List lista() {
		return dao.listaTodos();
	}

	public void adiciona(Artigo artigo) {
		dao.salva(artigo);
		result.use(logic()).redirectTo(ArtigosController.class).lista();
	}
}

Repare que estamos redirecionando para um método java! Nada de strings para configurar o redirecionamento, fazemos isso apontando diretamente qual método queremos usar. Repare ainda que estamos recebendo um Artigo chamado artigo no método adiciona. O VRaptor vai usar os parâmetros da requisição para instanciar e popular os atributos do objeto artigo usando seus getters e setters:

artigo.titulo=VRaptor3
artigo.autor=Lucas Cavalcanti
artigo.comentarios[0].autor=João da Silva
artigo.comentarios[0].texto=Artigo bem legal

No método adiciona(), pode ser interessante validar o artigo antes de salvá-lo no banco. Para fazer validações, o VRaptor possui o componente Validator que pode ser recebido no construtor do seu controller:

import static br.com.caelum.vraptor.view.Results.logic;
@Resource
public class ArtigosController {

	private final Validator validator;
	//...
	public ArtigosController(ArtigoDao dao, Result result, Validator validator) {
		//...
		this.validator = validator;
	}
	//...
	public void formulario() {...}

	public void adiciona(Artigo artigo) {
		validator.checking(new Validations() {{
			that(artigo.getTitulo() != null, "artigo.titulo",
"titulo.nao.pode.ser.nulo");
		}});
		//após executar as validações, você precisa falar para onde ir em
caso de erro:
		validator.onErrorUse(logic()).forwardTo(ArtigosController.class).formulario();

		dao.salva(artigo);
		result.use(logic()).redirectTo(ArtigosController.class).lista();
	}
}

Por fim, o VRaptor3 te ajuda a fazer uma aplicação RESTful de uma maneira bem simples. Basta anotar seus métodos com @Get, @Post, @Put ou @Delete, e usar o @Path para mudar a URI, com a possibilidade de passar parâmetros:

@Resource
public class ArtigosController {

	@Get @Path("/artigos")
	public List lista() {...}

	@Post @Path("/artigos")
	public void adiciona(Artigo artigo) {...}

	@Get @Path("/artigos/{artigo.id}")
	public void visualiza(Artigo artigo) {...}

	@Put @Path("/artigos/{artigo.id}")
	public void atualiza(Artigo artigo) {...}

	@Delete @Path("/artigos/{artigo.id}")
	public void remove(Artigo artigo) {...}

}

Desse modo, podemos fazer as requisições do tipo:

GET /artigos      => lista os artigos
POST /artigos     => adiciona um artigo
GET /artigos/5    => visualiza o artigo de id = 5
PUT /artigos/10   => atualiza o artigo de id = 10
DELETE /artigos/2 => remove o artigo de id = 2

Para começar a usar o VRaptor3, você pode baixar o blank-project que contém um projeto configurado no eclipse, com as dependências mínimas e um web.xml de exemplo. Você pode ainda contar com uma extensa documentação em português, listas de email e um fórum do GUJ especializado em Frameworks brasileiros.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Vale a pena conferir! by Lennon Jesus

Tenho feito uns testes com o VRaptor3 e afirmo que vale a pena conferir esse ótimo framework.

A curva de aprendizado é tranquila e seus recursos são muito fáceis de se explorar e aplicar.

A equipe de desenvolvedores do VRaptor, mais uma vez, se superou.

Re: Vale a pena conferir! by Renan Oliveira

Concerteza vale mesmo.

Eu já conheco o Vraptor 2, a algumas semanas comecamos um novo projeto com o Vraptor 3, a versão está de parabéns =D.

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

2 Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

Percebemos que você está utilizando um bloqueador de propagandas

Nós entendemos porquê utilizar um bloqueador de propagandas. No entanto, nós precisamos da sua ajuda para manter o InfoQ gratuito. O InfoQ não compartilhará seus dados com nenhum terceiro sem que você autorize. Procuramos trabalhar com anúncios de empresas e produtos que sejam relevantes para nossos leitores. Por favor, considere adicionar o InfoQ como uma exceção no seu bloqueador de propagandas.