Tutorial de um minuto

Este guia rápido de introdução às ferramentas básicas do VRaptor 2, ele mostra como criar um componente básico de lógica de negócios.

Instalando o VRaptor

Siga a instrução de instalação para fazer o VRaptor funcionar.

O modelo

Nós vamos usar uma classe chamada Pessoa. Crie a seguinte classe:

package org.vraptor.exemplos.primeiro;

public class Pessoa {

        private String nome;

        private String endereco;

        private Long numeroPreferido;
        
        // getters and setters

        @Override
        public String toString() {
                return "[Pessoa " + nome + "," + endereco + "," + numeroPreferido + "]";
        }

}

O componente da lógica de negócio

Vamos criar nosso primeiro componente e lógica de negócio: criando uma nova pessoa.

Crie uma classe chamada PessoaLogic no pacote logic.

Assim que nós lermos uma nova pessoa do request, vamos criar uma nova pessoa e um método que contenha nossa lógica de negócio.

package org.vraptor.exemplos.logic;

public class PessoaLogic {

        public void adiciona(Pessoa pessoa) {
                System.out.println("Adicionando " + pessoa + " no banco de dados!");
        }

}

Os parâmetros do request

O parâmetro do tipo Pessoa será lido através da chave pessoa devido ao seu tipo e não através do nome da variável!

Se um parâmetro chamado pessoa.nome for encontrado no request, o método pessoa.setNome() será chamado usando o valor do parâmetro passado. O mesmo acontece com qualquer coisa que comece com pessoa (o nome do nosso campo).

Lembre-se de adicionar o arquivo jar do vraptor ao classpath do seu projeto!

package org.vraptor.exemplos.logic;

public class PessoaLogic {

        public void adiciona(Pessoa pessoa) {
                System.out.println("Adicionando " + pessoa + " no banco de dados!");
        }

}

A URL : pessoa.adiciona.logic

Agora vamos um passo à frente e configurar esta URL da lógica de negócio.

Vamos dar um nome à este componente (pessoa) e à lógica de negócio representada pelo método adiciona pelo adiciona.

Isso porque sua classe se chama PessoaLogic.

Isso significa que quando a url pessoa.adiciona.logic é chamada, nosso componente será instanciado, o campo pessoa preenchido com o parâmetro do request e depois o método adiciona é chamado.

package org.vraptor.exemplos.logic;

import org.vraptor.annotations.Component;

@Component
public class PessoaLogic {

        public void adiciona(Pessoa pessoa) {
                System.out.println("Adicionando " + pessoa + " no banco de dados!");
        }

}

Enviando objetos à camada de apresentação

Agora que nós sabemos que nosso método será invocado, vamos pensar sobre o que deve ser mostrado como resultado. Desejamos mostrar em nosso jsp que aquele objeto 'pessoa' foi adicionado com sucesso.

Dependendo da implementação de mvc que a aplicação for baseada, isto é realizado configurando um atributo no request... diremos ao vraptor sobre nosso desejo de colocar no request o valor do campo pessoa usando o getter:

package org.vraptor.exemplos.logic;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.Out;

@Component
public class PessoaLogic {

        private Pessoa pessoa;

        public void adiciona(Pessoa pessoa) {
                this.pessoa = pessoa;
                System.out.println("Adicionando " + pessoa + " no banco de dados!");
        }

        public Pessoa getPessoa() {
                return this.pessoa;
        }
}

Criamos o getter getPessoa(), assim o VRaptor faz o envio dessa pessoa para o request automaticamente.

Redirecionando para a camada de apresentação

Nós vamos usar o modelo padrão de redirecionamento: nomeDoComponente/NomeDaLogica.Resultado.jsp

Assim como o resultado padrão é ok nós criaremos um arquivo chamado: pessoa/adiciona.ok.jsp

Página de Sucesso : pessoa/adiciona.ok.jsp

Agora nós mostraremos o resultado usando aquele campo pessoa que foi colocado no request em um arquivo chamado sucesso.jsp

<html>
        Você criou uma nova pessoa chamada ${pessoa.nome},
        que mora em ${pessoa.endereco}
        e o número preferido é ${pessoa.numeroPreferido}.
</html>

Página index : /index.jsp

Vamos criar um simples index.jsp que contenha o seguinte form:

<html>
<form action="pessoa.adiciona.logic" method="get">
        Nome: <input name="pessoa.nome"/><br/>
        Endereço: <input name="pessoa.endereco"/><br/>
        Número Preferido: <input name="pessoa.numeroPreferido"/><br/>
        <input type="submit"/>
</form>
</html>

Registrando o componente

Vamos agora criar o arquivo xml... a idéia é que você não precisa de um arquivo! O VRaptor buscará todas as classes anotadas com @Component no seu classpath e irá registrá-las automaticamente.

A estrutura de diretórios

Então teremos a seguinte estrutura

|-pessoa
|    |--/adiciona.ok.jsp
|-WEB-INF
     |--/web.xml
     |--/lib
     |    |--/arquivos de jar
     |--/classes
          |--/arquivos das classes

Testando

  1. Abra sua aplicação web
  2. acesse index.jsp: isso mostrará um form
  3. preencha o form com os dados

    Nome: Guilherme
    Endereçãoo: Vergueiro
    Número Preferido: 7

  4. Aperte Submit

O que aconteceu?

  1. A url pessoa.adiciona.logic?pessoa.nome=Guilherme&pessoa.endereco=Vergueiro&pessoa.numeroPreferido=7 é requisitada
  2. o vraptor servlet (controller) analisa a url
    e faz com que o componente chamado pessoa, a lógica chamada adiciona chame a classe PessoaLogic, método adiciona.
  3. PessoaLogic é instanciado
  4. pessoa.setNome, pessoa.setEndereco e pessoa.setNumeroPreferido são chamados
  5. o método adiciona (nossa lógica de negócio) é chamado
  6. o campo pessoa é colocado no request (escopo de request)
  7. vraptor procura a página pessoa.adiciona.ok e encontra /pessoa/adiciona.ok.jsp
  8. acontece o redirecionamento e os dados são mostrados

Conclusão

Volte ao início e olhe o código...sem configuração em xml?

Sua lógica de negócio é um simples POJO?

Você importou alguma coisa relacionada com javax.servlet? Algum HttpServletRequest?

Você teve que converter String em int?

Você escreveu algum arquivo XML horrível desumano, que só o computador lê?

Você configurou alguma visualização?

Nós realmente precisamos explicar o que foi configurado? Foi simples...