[RESOLVIDO] Interceptor com Annotation no Struts 2  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
leoloko
JavaChild
[Avatar]
Membro desde: 15/05/2005 12:05:19
Mensagens: 149
Offline

Caros,

Procurei mas não encontrei nada concreto sobre isso, então resolvi postar, vamos lá.


Action


Interceptor


Primeiro gostaria de saber se, mesmo usando annotations, preciso declarar o interceptor no struts.xml?

Independente do caso acima, eu já tentei das duas formas, mas sempre obtenho a mensagem:



struts.xml



Será que alguém poderia me dizer onde estou errando? Ou então postar algum exemplo funcional de interceptor com annotations?


Desde já obrigado.

This message was edited 1 time. Last update was at 18/02/2010 16:08:04

[MSN] [ICQ]
jyoshiriro
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2009 14:14:39
Mensagens: 587
Offline

Amigo,

uma dica: seu código poderia ficar menor.



Assim, a url seria "hello-world" (porque sua classe se chama "HelloWorldAction") e o destino seria "/WEB-INF/content/hello-world.jsp" para qualquer resultado.

Quanto ao Interceptor, você deve estender o AbstractInterceptor e não implementar Interceptor.

Para mapear os interceptors para aplicação realmente só via XML, mesmo com o Convention Plugin do Struts 2.1.x. Mas como existe apenas uma meia dúzia de interceptors por aplicação e só há esse trabalho no inicio de um projeto, isso não chega a ser um problema.

José Yoshiriro Ajisaka Ramos

OCUP Fundamental / SCJP 6 / SCWCD 5 / SCBCD 5
[Email] [WWW]
leoloko
JavaChild
[Avatar]
Membro desde: 15/05/2005 12:05:19
Mensagens: 149
Offline

jyoshiriro wrote:Amigo,

uma dica: seu código poderia ficar menor.



Assim, a url seria "hello-world" (porque sua classe se chama "HelloWorldAction") e o destino seria "/WEB-INF/content/hello-world.jsp" para qualquer resultado.

Quanto ao Interceptor, você deve estender o AbstractInterceptor e não implementar Interceptor.

Para mapear os interceptors para aplicação realmente só via XML, mesmo com o Convention Plugin do Struts 2.1.x. Mas como existe apenas uma meia dúzia de interceptors por aplicação e só há esse trabalho no inicio de um projeto, isso não chega a ser um problema.




Opa valew pelas dicas, realmente fica mais prático desta forma, mas o interceptor ainda não rolou, meus códigos estão assim:

Action


Interceptor


struts.xml


Ainda estou obtendo a mensagem Unable to find interceptor class referenced by ref-name loginStack - [unknown location] ao startar o tomcat.

Sei lá mó sinistra essa parada, aparentemente tudo certo, existe alguma anotação a ser feita no interceptor? Creio que não, estou perguntando apenas por desencargo.

Vlw
[MSN] [ICQ]
jyoshiriro
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2009 14:14:39
Mensagens: 587
Offline

Você criou e mapeou o Interceptor num pacote que chamou de "default", certo?

Então ou você indica que este é o pacote padrão do seu projeto ou faz com que a Action o use.

1. pacote padrão do seu projeto: setar a propriedade struts.convention.default.parent.package para default (no struts.xml ou no struts.properties)

2. fazer com que a Action o use: usar a anotação @ParentPackage("default") sobre a assinatura da classe.

E mais: já que pretende usar o convention plugin, sugiro que seu pacote padrão (no caso, o "default") estenda o "convention-default" e não o "struts-default".

This message was edited 1 time. Last update was at 18/02/2010 15:53:16


José Yoshiriro Ajisaka Ramos

OCUP Fundamental / SCJP 6 / SCWCD 5 / SCBCD 5
[Email] [WWW]
leoloko
JavaChild
[Avatar]
Membro desde: 15/05/2005 12:05:19
Mensagens: 149
Offline

jyoshiriro wrote:Você criou e mapeou o Interceptor num pacote que chamou de "default", certo?

Então ou você indica que este é o pacote padrão do seu projeto ou faz com que a Action o use.

1. pacote padrão do seu projeto: setar a propriedade struts.convention.default.parent.package para default (no struts.xml ou no struts.properties)

2. fazer com que a Action o use: usar a anotação @ParentPackage("default") sobre a assinatura da classe.

E mais: já que pretende usar o convention plugin, sugiro que seu pacote padrão (no caso, o "default") estenda o "convention-default" e não o "struts-default".


Mano.... você é o cara... agora ta tudo funcionando direitinho.

Vou postar as classes finais aqui, caso alguma outra pessoa procure um exemplo completinho.

HelloWorldAction.java


LoginCheckInterceptor.java


struts.xml


Obrigado pela ajuda, fica com deus.

T+
[MSN] [ICQ]
ffontouras
Entusiasta Java
[Avatar]

Membro desde: 23/01/2010 08:52:44
Mensagens: 16
Localização: São José dos Campos - SP
Offline

Caros,

Segui passo-a-passo até uma "cópia" do código acima, porem tenho o erro abaixo a hora que reinicio o tomcat: Unable to find interceptor class referenced by ref-name sessaoStack - [unknown location]

Isso só acontece quando aplico o annotation @InterceptorRef("sessaoStack") na classe action HomeAction.java!!!!!

Segue o código:


Action (HomeAction.java)




Interceptor (LoginInterceptor.java)




Config (struts.xml)




Já vasculhei a net e o forum e estou a 5 horas tentanto resolver este problema.

Se alguem tiver uma luz me passa. Rs

Abraços!

Felipe Fontoura
corp: http://www.internetsistemas.com.br
twitter: http://twitter.com/felipefontoura
linkedin: http://br.linkedin.com/in/felipefontoura
[Email] [WWW]
jyoshiriro
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2009 14:14:39
Mensagens: 587
Offline

Você criou e mapeou o Interceptor num pacote que chamou de "default", certo?

Então ou você indica que este é o pacote padrão do seu projeto ou faz com que a Action o use.

1. pacote padrão do seu projeto: setar a propriedade struts.convention.default.parent.package para default (no struts.xml ou no struts.properties)

2. fazer com que a Action o use: usar a anotação @ParentPackage("default") sobre a assinatura da classe.

José Yoshiriro Ajisaka Ramos

OCUP Fundamental / SCJP 6 / SCWCD 5 / SCBCD 5
[Email] [WWW]
ffontouras
Entusiasta Java
[Avatar]

Membro desde: 23/01/2010 08:52:44
Mensagens: 16
Localização: São José dos Campos - SP
Offline

Pessoal apesar de tudo no código estiver certo meu struts.xml estava no lugar errado e o struts não "enchergava". Por isso do erro de package não encontrada.

Abraços!

Felipe Fontoura
corp: http://www.internetsistemas.com.br
twitter: http://twitter.com/felipefontoura
linkedin: http://br.linkedin.com/in/felipefontoura
[Email] [WWW]
melice
Smalltalk

Membro desde: 21/02/2011 10:36:55
Mensagens: 1
Offline

Vi que o tópico é um pouco antigo, mas descobri o problema e quero disponibilizar a solução:
No Eclipse, coloquei o struts.xml no WEB-INF, conforme o tutorial que utilizei dizia para fazer.
Fiz o deploy no tomcat. Cheguei a testar algumas formas diferentes mas o resultado eram os erros: "Unable to find interceptor class referenced by ref-name x - [unknown location]" ou "Unable to locate parent package [x] - [unknown location]".
Obviamente o struts.xml era inserido na pasta WEB-INF na aplicação.
Depois de alguns testes, consegui que funcionasse quando movi o stuts.xml para a pasta "classes".
Portanto, o local correto para inserir o struts.xml no projeto é na pasta src.
Para isso, no Eclipse, botão direito na pasta src > new > Other > General > File. Selecione a pasta src e crie o arquivo struts.xml.
Depois, é só adicionar o conteúdo do struts.xml, "clean" no tomcat, e realizar novamente o deploy.
Abraços.
far56
HelloWorld

Membro desde: 09/01/2009 09:28:11
Mensagens: 10
Offline

Pessoal segui exatamente essas orientações, mas no meu caso a execução está entrando em loop, exemplo: Entra no método execute da Action1 e depois vai pro interceptor, e dentro do interceptor eu dou um invoke, ele vai pro metodo execute da Action1, e assim por diante, até dá um erro de loop. Alguem tem alguma ideia?
Grato
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team