Recuperar Errors do BeanValidator  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Ola

Não percebo um clara justificativa para que não possamos recuperar os erros (Message) ocorridos quando usamos alguma implementação da JSR de Bean Validator através do VRaptor, leia-se:



Eu tenho realmente que criar um Interceptor para pegar o parâmetro "errors" (próprio do VRaptor) existente pós validação?


Porque não disponibilizá-las publicamente ?

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Não entendi teu post. O VRaptor exporta os erros do BeanValidator com as constraints violations.

https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/validator/DefaultValidator.java
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/validator/JSR303Validator.java

BeanValidator.validate retorna uma lista de Message, e o DefaultValidator.validate exporta para o atributo errors. Como as mensagens são exportadas para o atributo errors, você pode fazer um foreach no JSP e ler essas mensagens normalmente.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Simples garcia, a interface não tem este método.

AbstractValidator marca ele como protegido e é usado por DefaultValidator, este sim contém o método público.



Minha questão é:

Porque este método não é declarado na interface? Eu teria que declarar, no controller, a implementação diretamente (ou fazer CAST), para ter acesso a este método.


This message was edited 2 times. Last update was at 20/04/2011 11:01:14


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Você tem acesso a ele pelo JSP via atributo errors. Você precisa dele no controller?

This message was edited 1 time. Last update was at 20/04/2011 11:04:19


http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Seria o óbvio ululante, garcia.

Mas br.com.caelum.vraptor.Validator não tem o método getErrors()

Estou usando a versão 3.3.1

Obg

This message was edited 1 time. Last update was at 20/04/2011 11:06:10


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

garcia-jj wrote:Você tem acesso a ele pelo JSP via atributo errors. Você precisa dele no controller?


Isso, eu preciso no Controller. Meu cliente é um Aplicativo que consome JSON. (de antemão aviso que o Deserializer default do VRaptor não funciona pra mim, eu estou usando o GSon)

O ponto desta thread não é a solução em si, mas o por quê não disponibilizá-lo na interface Validator.

Um cara que valida algo, por definição, deve saber informar os erros encontrados.

This message was edited 2 times. Last update was at 20/04/2011 11:10:11


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

seufagner wrote:O ponto desta thread não é a solução em si, mas o por quê não disponibilizá-lo na interface Validator.


Vamos com calma. Antes de mais nada preciso entender as necessidades para saber como te ajudar.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

antes de mais nada, se vc usar o:



e a requisição veio com Accept: application/json ou algo do tipo, ele vai serializar os erros pra json automaticamente.



A gente não disponibiliza os erros na interface Validator, pq geralmente não faz mto sentido vc acessar os erros no controller, é algo que vc só precisa na view.

de qqer forma, vc pode estender o VRaptor:



e receber o MeuValidator no construtor...



--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

@garcia-jj, Lucas

O aplicativo cliente recebe tudo em JSON, inclusive mensagens de erro, ao invés de HTTP CODE e/ou, porventura, uma mensagem no corpo.

O atalho do VRaptor produz um HTTP CODE 400, certo? Não serve para mim. Nem sempre podemos fazer algo mais próximo de Restful.

Trata-se de um aplicativo feito em Flash que consome JSON e envia JSON. Ele será o único cliente, então não posso me prender a diversas good practices de serviços web, REST ou não, pois a plataforma da Adobe é bem limitada e cheia de problemas.

Neste caso específico, ao receber um code 400 ele simplesmente retorna um IOError e não tem como capturar a resposta, quiçá, enviada pelo serviço.


Como é muito simples a solução do Lucas, vou utilizá-la, pois assim meu cliente vai ganhar dinheiro e, da maneira mais responsável possível, irei resolver o problema dele.

Obrigado pessoal!

This message was edited 2 times. Last update was at 20/04/2011 13:42:41


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Vocês não acham que os erros deveriam ser conhecidos no Controller?

Acho natural usar o padrão (colocar o erros no request), porém, por default, não vejo problemas em disponibilizá-los no Controller também.

E se o cara quiser enviar as mensagens em outra formatação, não é normal? Neste caso o VRaptor não estaria tolhendo demais o programador para utilizar o padrão dele ? Enviá-la de outra forma demanda, desnecessariamente, o trabalho de sobrescrever o framework.


O que vocês acham?

This message was edited 2 times. Last update was at 20/04/2011 14:56:28


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

abre lá uma issue pedindo isso, por favor:

http://github.com/caelum/vraptor/issues/

se puder fazer um fork e mandar um pull request com a implementação seria bem legal tb

--
Caelum
www.caelum.com.br

garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Lucas Cavalcanti wrote:abre lá uma issue pedindo isso, por favor:

http://github.com/caelum/vraptor/issues/

se puder fazer um fork e mandar um pull request com a implementação seria bem legal tb


Será que é legal retornar uma lista imutável de errors?

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

por exemplo

--
Caelum
www.caelum.com.br

garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Lucas Cavalcanti wrote:por exemplo




Ao invés de retornar diretamente os errors.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Bacana garcia, mas só lembrando que você com unmodifiableXX pode mudar os objetos NA instância da lista de qualquer forma. O que você não pode é, simplesmente, alterar a instância DA PRÓPRIA lista.

Ou seja, não vejo qualquer benefício prático neste caso.

Lucas,

Chegando em casa vou implementar e dar um pull.

This message was edited 1 time. Last update was at 20/04/2011 17:06:20


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team