Olá,
Estou enfrentando um pequeno problema com o VRaptor 3. Tenho uma interface em meu sistema que é utilizada para filtrar alguns resultados. Um dos campos da minha entidade é do tipo Boolean, então achei por bem utilizar um Boolean na minha lógica. Porém, há casos que não desejo passar nenhum valor (não irei filtrar por esse campo), e esperava receber um null na minha lógica, e de fato é isso que eu recebo. Apesar disso, ocorre uma exceção na conversão do Boolean e recebo a seguinte mensagem na tela (junto com um stacktrace), ao invés de ser redirecionado para a view:
There are validation errors and you forgot to specify where to go. Please add in your method something like:
validator.onErrorUse(page()).of(AnyController.class).anyMethod();
or any view that you like.
Após debugar, pude observar que o BooleanConverter lança uma exceção, porém esse comportamento de transformar a exceção em um erro de validação um tanto problemático, visto que se não estivermos utilizando o validator na lógica é muito improvável que exista um “validator.onErrorUse()”. O problema maior é que demora um pouco até cair a ficha de qual é exatamente o problema, visto que a exceçao não tem nada a ver com o problema, e pior, debugando a lógica ela executa normalmente (!!), só falhando o dispatch para a view, devido ao erro não tratado.
Um ponto que observei é que o Converter do tipo primitivo boolean retorna falso caso o parâmetro seja nulo ou “”, porém no caso do Boolean null retornaria null, enquanto “” lança um ConversionError. No caso de um na view, não é possível obter um null (sem recorrer a manipulação de Javascript), mas utilizar um Selecione é muito comum, sendo inclusive reconhecido por várias bibliotecas como campo não preenchido. Não seria interessante fazer o “” também returnar null no caso do BooleanConverter, a fim de simplificar a vida de que utiliza a campos Boolean em e manter coerência com o PrimitiveBooleanConverter?
T+
