Problemas com herença de action no struts

E aí galera beleza?

Estou tendo o seguinte problema.

Cheguei a conclusão que em meu projeto ficará mais fácil se eu tiver uma classe action uqe estende a casse action do struts, com métodos e funcionalidades comuns a todos os actions do projeto.
Até aí tudo bem, criei um action com as caracteristica acima e criei os outos actions herdando dessa classe e não do action e no action mapping coloquei as classes action que hedão desse “action pai” mas quando chamo o link do mapeamento aparece uma aviso de erro indicando que não foi possivel fazer a instnancia do action.

Uma coisa eu pensei: Se uma classe herda de action, então essa classe é um action. Se uma classe herda de uma classe que herdou de um action, ess classe também é um action.
Alguém poode me ajudar?

Opa,

eu faço isto, o mapeamento fica só para as actions que são classes filhas.

:okok:

O teu método “execute” deve retornar o “mapeamento”… o execute de estar nas tuas filhas, o que vc pode fazer é utilizar constantes na classe pai para utilzar o “mapeamento” desta forma… mas mesmo assim, os filhos tem caminhos diferentes a seguir, porque deixar isso no pai?!

Aí galera beleaza?

bom o erro é esse:


type Status report

message No action instance for path /Processadores could be created

description The server encountered an internal error (No action instance for path /Processadores could be created) that prevented it from fulfilling this request.

meu mapeamento está assim:

 <action path="/Processadores" type="br.com.lojahardware.action.menuesquerdo.ProcessadoresAction">
			<forward name="success" 
				path="menu.esquerdo.hardware.processadores" 
				redirect="false" 
				contextRelative="false" />			
		</action>

minha action “mãe” está asim

/**
 * Criado em 29/06/2006
 */
package br.com.lojahardware.action;

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.lojahardware.config.Constantes;

/**
 * @author Leandro Costa Silva(<a href="mailto:leandrocosta.silva@terra.com.br">leandrocosta.silva@terra.com.br</a>)
 *
 */
public abstract class SuperAction extends Action {
	
	private HashMap <String,String>configs = null;
	
	abstract public ActionForward execute(ActionMapping mapping,
	        ActionForm form,
	        HttpServletRequest request,
	        HttpServletResponse response) throws Exception ;
	
	public SuperAction(){
		String appConfig = servlet.getServletContext().getRealPath(servlet.getInitParameter(Constantes.CONFIG));
		String boConfig = servlet.getServletContext().getRealPath(servlet.getInitParameter(Constantes.BOPROPERTIES));
		String daoConfig = servlet.getServletContext().getRealPath(servlet.getInitParameter(Constantes.DAOPROPERTIES));
		
		configs = new HashMap<String, String>();
		
		configs.put(Constantes.CONFIG,appConfig);
		configs.put(Constantes.BOPROPERTIES, boConfig);
		configs.put(Constantes.DAOPROPERTIES, daoConfig);
	}
	
	public HashMap getAppConfigs(){
		return configs;
	}

}

A filha é essa:


/**
 * Criado em 26/06/2006
 */
package br.com.lojahardware.action.menuesquerdo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.lojahardware.action.SuperAction;
import br.com.lojahardware.delegate.Delegate;

/**
 * @autor Leandro Costa Silva(<a
 *        href="mailto:leandrocosta.silva@terra.com.br">leandrocosta.silva@terra.com.br</a>)
 * 
 */
public class ProcessadoresAction extends SuperAction {

	public ActionForward execute(ActionMapping mapping,
	        ActionForm form,
	        HttpServletRequest request,
	        HttpServletResponse response) throws Exception {
		
		Delegate delegate = new Delegate(getAppConfigs());
		List processadores = null;

		processadores = delegate.getListaProcessadores();

		request.setAttribute("processadores", processadores);
		return mapping.findForward("success");
	}

}

A meu ver isso está certo mas, vai saber, sa vezes a terra está girando ao contrário, brincaderia. :lol:
Mas obrigado pela força galera!

Opa,

para isto tua classe pai deve extender DispatchAction ao invés de Action.

:okok:

[quote=“marcossousa”]Opa,

para isto tua classe pai deve extender DispatchAction ao invés de Action.

:okok:[/quote]

cara, tentei mas nem funcionou

pode me mandar um exemplo, por caridade?
Já estou desesperado, se for o caso coloco at;e código asp aqui
ehheehhehe

Obrigado pela força galera

Opa,

acho que agora está mais fácil… bem esqueça o método execute… não servirá mais para nada… em compensação use o atributo na declaração da sua action:

aí quando você chamar sua action você faz assim:
http://myserver/myApp/minhaAction.do?metodo=metodoDestino

:okok:

E aí galera beleza?

Obrigado pela força!

Após ter apanhado muito finalmente consegui. Obrigado!

Que bom cara, parabéns!

O que eu lhe passei ajudou?

\0/

:okok: