[Resolvido] [Struts2] Interceptor impedindo objeto de ser populado

1 resposta
rfa1989

Dae pessoal.
Estou tentando aprender Struts2 e me deparei com um problema ao tentar lidar com interceptors.

Primeiramente, eu tenho a minha Action:

@ParentPackage("default")
public class AdicionaTarefaAction extends ActionSupport {
	private Tarefa tarefa;

	@Action(value = "adicionaTarefa", results = {
			@Result(name = "ok", location = "/tarefa-adicionada.jsp"),
			@Result(name = "input", location = "/formulario-tarefas.jsp") },
			interceptorRefs= {@InterceptorRef("autorizador")})
	public String execute() {
		if(tarefa==null)
			System.out.println("oi");
		new TarefaDAO().adiciona(tarefa);
		return "ok";
	}

	public Tarefa getTarefa() {
		return tarefa;
	}
	public void setTarefa(Tarefa tarefa) {
		this.tarefa = tarefa;
	}
}

E eu também tenho o meu arquivo adiciona-tarefa.jsp, que contém a seguinte chamada para a action acima:

<form action="adicionaTarefa" method="post">
	Descricao:<br/>
	<textarea name="tarefa.descricao" rows="5" cols="100"></textarea><br/>
	<input type="submit" value="Adicionar">
</form>

O que acontece?
Ao carregar a pagina adiciona-tarefa.jsp , preencher o form e clicar no botão de submit, percebo que a string "oi" é mostrada no console do eclipse e recebo um httpError500 no browser com a NullPointerException, devido a minha tentativa de adicionar um objeto null.

Ou seja, o form não está conseguindo carregar os dados para o objeto 'Tarefa tarefa' dentro da minha Action.

Agora vem o interessante:
Retirando a seguinte linha 'interceptorRefs= {@InterceptorRef("autorizador")}' do código, tudo volta a funcionar normalmente; i.e, o objeto 'Tarefa tarefa' é populado corretamente e o fluxo de paginas que programei segue de forma correta.

Eu sei que o interceptor chamado "autorizador" está funcionando bem, pois ele demostrou o resultado correto para as outras Action's que tenho no projeto.
Além disso, sei que o web.xml e o struts.xml estão configurados corretamente (pelo mesmo motivo explicado acima)

Alguém sabe me dizer qual o problema??

1 Resposta

rfa1989

Achei o erro. Vou colocar aqui pra quem visitar futuramente ter uma solucao.

No meu struts.xml tnha esquecido de configurar o interceptor-stack
Achei que isso não era necessário, pois “autorizador” era o unico interceptor que programei em todo o projeto.
Parece que eu estava enganado.

Foi só acrescentar algo assim no meu struts.xml

<interceptor-stack name="stack-with-login"> <interceptor-ref name="autorizador" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="stack-with-login" />

que tudo começou a funcionar como esperado.

Criado 22 de fevereiro de 2011
Ultima resposta 23 de fev. de 2011
Respostas 1
Participantes 1