BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos VRaptor 3

VRaptor 3

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

Conteúdo educacional

BT