VRAPTOR (Enum + controller = redirect problem)  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Boa tarde senhores,

Tenho um método de um controller que espera receber como parâmetro um enum, assim:


Se eu faço um request no browser, da maneira a baixo, tudo ocorre normal.
http://localhost:8080/meuwar/payment?type=CARTAO

Entretanto, se eu faço um redirect de algum outro método, da maneira a baixo, o type é nulo, e se eu uso-o, naturalmente, eu obtenho um NullPointerException.


O que estou fazendo de errado?
Ou isso é um "bug" do VRaptor?

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

joeroots
Thread.start()
[Avatar]

Membro desde: 22/06/2010 18:36:09
Mensagens: 42
Offline

aqui funcionou perfeitamente:


Controller:


Saida:



_______________________________edit_______________________
para ele funcionar com o get eu fiz o seguinte:


e acessei assim:


Saida:

This message was edited 1 time. Last update was at 17/01/2011 16:17:12


______________________
Att.
Jonathan
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

maruero, dá null pointer na linha do redirect, ou depois do redirect?

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Depois do redirect.

Ou seja, o type na linha 04 do código a baixo está nulo.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

maruero, não consegui reproduzir o bug... que versão vc está usando do vraptor?

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

3.2.0

Estranho.

Eu coloquei um Interceptor apenas para verificar se o parâmetro está sendo passado corretamente, e no construtor do interceptor eu recebo um MethodInfo com um Type dentro.
Apenas no controller mesmo que o parâmetro fica nulo. Como se o VRaptor não soubesse interpretá-lo antes de chamar o método paymento do controller.

Vou continuar procurando possiveis erros.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

vc consegue reproduzir esse erro a partir do blank-project do vraptor?

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Consegui reproduzir o erro no black_project e descobrir a fonte do problema, mas tive que fazer várias alterações.

O problema começa ocorrer quando eu implemento uma InterceptorSequence definindo nela o ParametersInstantiatorInterceptor como primeiro Interceptor a ser executado.
Preciso disso, pois tenho um outro Interceptor (responsável por disponibilizar a tela de login ao usuário quando este tenta acessar páginas de acesso restrito, e após o login dá um forward ao controller original requisitado pelo usuário) que necessita conhecer os parâmetros passados da JSP para os Controllers.

Alguem tem uma sugestão de consertar meu problema?
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

entendi.

Se vc coloca o ParametersInstantiatorInterceptor num InterceptorSequence ele é registrado duas vezes. Por isso o nullPointer.

na próxima versão do VRaptor que sairá em breve, você pode fazer simplesmente:



sem necessidade do InterceptorSequence.

use por enquanto esse snapshot:
https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.2.1-SNAPSHOT/vraptor-3.2.1-20110117.201244-10.jar

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Obrigado Lucas.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

se der qqer erro nesse snapshot ou vc tiver alguma sugestão por favor me avise, pra gente corrigir antes de lançar a versão nova

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Lucas,

Estou usando o snapshot e estou com um comportamente um pouco estranho.
Tenho 3 interceptors meus:
- Login
- Exceptions
- Initialization

Fiz o seguinte:
Exceptions executa "after" ParametersInstantiationInterceptor
Initialization executa "after" Exceptions
Login executa "after" Initialization

A idéia era deixar a sequencia assim:
ParametersInstantiationInterceptor -> Exceptions -> Initialization -> Login -> Controllers.

A sequencia está sendo respeitada, mas, estranhamente, os Controllers são instanciados antes de ser interceptados.
Ou seja, os construtores dos controllers executam antes dos Interceptors, isso está certo?

Isso está quebrando um pouco a idéia do meu InitializationInterceptor que é recuperar os parâmetros do contexto e colocá-los na sessão, para que os construtores dos controllers possam configurar os controllers durante o processo de inicialização.

This message was edited 1 time. Last update was at 19/01/2011 10:39:58

Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

coloca o que precisa rodar antes de instanciar o controller com before=InstantiatorInterceptor.class...

por padrão ele só é antes de executar o método, não necessariamente antes de instanciar o controller

--
Caelum
www.caelum.com.br

maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Obrigado.
Funcionou!!!
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team