Interceptors com Annotation no Struts2 - Action perde acesso ao bean do JSP [RESOLVIDO]

Pessoal,

estou com um problema ao usar Interceptors do Struts2. Quando associo minha Action ao Interceptor atraves da annotation interceptorRefs = {@InterceptorRef(“authorizer”)} minha Action nao consegue mais ter acesso ao Javabean do JSP. Seguem os codigos:

Action:

[code]@ParentPackage(“default”)
package uk.co.rangel.tasks.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import uk.co.rangel.dao.TaskDAO;
import uk.co.rangel.tasks.model.Task;

@ParentPackage(“default”)
public class AddTaskAction {

private Task task;
	
@Action(value="addTask", 
		results={@Result(name="OK", type="redirectAction", params={"ActionName", "listTasks"})},
		interceptorRefs = {@InterceptorRef("authorizer")})
public String execute(){
	new TaskDAO().addTask(this.task);
	return "OK";
}

public Task getTask() {
	return task;
}

public void setTask(Task task) {
	this.task = task;
}

}
}[/code]

Interceptor:

[code]public class AuthorizerInterceptor implements Interceptor {

private static final long serialVersionUID = -8924888461901666436L;

@Override
public void destroy() {
}

@Override
public void init() {
}

@Override
public String intercept(ActionInvocation invocation) throws Exception {
	Login login = (Login) invocation.getInvocationContext().getSession().get("loginSession");
	if(login == null){
		return "FAIL";
	} else {
		return invocation.invoke();
	}
}

}
[/code]

struts.xml:

[code]<struts>
<include file=“struts-default.xml”/>
<package name=“default” extends=“struts-default”>
<interceptors>
<interceptor name=“authorizer” class=“uk.co.rangel.tasks.interceptor.AuthorizerInterceptor”/>
</interceptors>

	&lt;global-results&gt;
		&lt;result name="FAIL"&gt;/jsp/login.jsp&lt;/result&gt;	
	&lt;/global-results&gt;
&lt;/package&gt;

</struts>[/code]

Form JSP:

&lt;form action="addTask" method="post"&gt; &lt;table width="800"&gt; &lt;tr&gt; &lt;td&gt;Description:&lt;/td&gt; &lt;td&gt;&lt;textarea name="task.description" rows="5" cols="100"&gt;&lt;/textarea&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;input type="submit" value="SAVE"/&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/form&gt;

Agredeco desde ja a ajuda de todos!

Amigo, acredito que esteja depreciado o uso de Interceptors como você fez.

Faça sua classe estender AbstractInterceptor ao invés de implementar a Interface que você usou.

Uma dica:

Seu código:

@Action(value="addTask", // não precisa indicar o "value" caso assuma o mesmo prefixo do nome da classe results={@Result(name="OK", type="redirectAction", params={"ActionName", "listTasks"})}, // Por que "OK" ao invés do SUCCESS? ; "ActionName" está errado!; não precisa chaves quando é só 1 interceptorRefs = {@InterceptorRef("authorizer")}) // não precisa chaves quando é só 1

Poderia ficar:

@Action( results=@Result(type="redirectAction", params={"actionName", "listTasks"}), interceptorRefs = @InterceptorRef("authorizer"))
Dai o seu método retorna SUCCESS (valor constante) e não “OK”. Mas sua Action precisaria estender ActionSupport (acredite, isso traz MUUUUUITAS vantagens!).

Outra dica:
Não precisa de no seu struts.xml.
Isso é feito automaticamente pelo Struts 2 já.

A parte de interceptors do Struts2 quando vc trabalha com as anotações é algo bem feio. De qualquer forma Rangel, vc precisa declarar que a sua Action precisa passar pela stack de interceptors do Struts. Pra isso basta adicionar no atributo interceptorRefs a anotação @InterceptorRef(“defaultStack”).

Aí ficaria:

@Action(value="addTask",   
            results={@Result(name="OK", type="redirectAction", params={"ActionName", "listTasks"})},  
            interceptorRefs = {@InterceptorRef("authorizer"), @InterceptorRef("defaultStack")}) 

Teste ae e qlqr coisa avise.

[]'s

Muito obrigado pela ajuda amigos. Resolveram meu problema!