O que são conversores?

Quando uma requisição é enviada ao servidor, VRaptor tenta ler os parâmetros e prencher as variáveis que você anotou com @Parameter. Para atingir isso, VRaptor tem que converter todos os parâmetros para um determinado objeto do java, pois qualquer parâmetro é enviado como String.

Por exemplo, se você quiser ler o parâmetro person.id=10, e o seu modelo é:

public classe Person {

        private Integer id;
        //more fields

        public void setId(Integer id) {
                ...
        }

        //other getters and setters
}

... VRaptor deve converter o String 10 para um integer. Para fazer isso existem alguns conversores básicos instalados por padrão.

Conversores básicos

Alguns conversores básicos são embutidos no arquivo .jar.

Eles podem converter um String para:

  1. boolean, Boolean
  2. char, Character
  3. float, Float, double, Double (baseado no locale)
  4. byte, Byte, short, Short, int, Integer, long, Long
  5. String (claro!)
  6. BigDecimal
  7. Calendar (baseado no locale)

Erro de conversão

Para gerar um erro de conversão, jogamos uma ConversionException. O primeiro argumento dela indica o que aconteceu.

Vraptor tenta injetar todos os parâmetros, junta todas as exceções de conversão que foram jogadas e as usa para a variável de erros (veja validação) pois, é na verdade uma questão de validação.

Se alguma dessas exceções é jogada, o comportamento padrão de "validação invalida" segue: a lógica retorna "invalid" e o controlador chama a página "inválida" (também veja a documentação como funciona o redirecionamento ao mesmo formulário).

Chaves padrões para uma exceção de conversão

Verifique a javadoc dos conversores básicos para ver quais as chaves que serão usadas para as mensagens de erros.

Tem duas mensagens de erros importantes que você deveria conhecer.

  1. no_converter_found = Não existe nenhum conversor para tratar o tipo.
  2. invalid_converter = Impossível criar o conversor (porque falta o construtor default, por exemplo).

    Essas chaves não devem mudar entre versões do VRaptor.

LocaleCalendarDateConverter

O conversor LocaleCalendarDateConverter é baseado no locale que é instalado por padrão.

Ele usa a chave javax.servlet.jsp.jstl.fmt.locale.session definido pelo JSTL para achar o locale do usuário na sessão. Se nenhuma chave for encontrada, ele usa o locale padrão do sistema.

Para alterar o locale do usuário, leia o nosso tutorial ou a especificação jstl:fmt.

Outros conversores

  1. FixedPatternCalendarConverter