Ajuda! Struts controle de actions

Galera estou precisando criar uma actionPrincipal no meu sistema que ela extenda a action do struts e as demais action extendem a actionPrincipal.
Bom eu vou postar como estou fazendo

minha actionPrincipal


public abstract class ActionPrincipal extends Action {   
  
    public ActionForward execute(ActionMapping mapping,   
            ActionForm form,   
            HttpServletRequest request,   
            HttpServletResponse response) throws Exception{
                
        ManterSituacaoImovelAction manterSituacaoImovelAction = new ManterSituacaoImovelAction();
        
        manterSituacaoImovelAction.execute(mapping, form, request, response);
        
        return mapping.findForward("SUCCESS");
    }            
                     
}

Minha actionFilha


public class ManterSituacaoImovelAction extends ActionPrincipal {

    private final static String SUCCESS = "success";
    private final static String FAIL = "fail";
    private final static String ERROR = "error";    
    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)throws Exception{
                    
        OracleConnect oraConnect = new OracleConnect();
        oraConnect.createConnection();
        
        SituacaoImovel situacaoImovelVO = new SituacaoImovel();
        
        SituacaoImovelService situacaoImovelService = new SituacaoImovelService();

        ManterSituacaoImovelForm manterSituacaoImovelForm = (ManterSituacaoImovelForm) form;
        
        BeanUtils.copyProperties(situacaoImovelVO, manterSituacaoImovelForm);
        
        SituacaoImovel situacaoImovel = situacaoImovelService.insertSituacaoImovel(situacaoImovelVO);
        
        manterSituacaoImovelForm.setCdSituacao(situacaoImovel.getCdSituacao());
        
        oraConnect.Commit();
        oraConnect.closeConnection();
        
        if (situacaoImovel.getPRetCodigo() >= 0) {            
            manterSituacaoImovelForm.setMensagem(situacaoImovel.getPRetMensagem());            
            return mapping.findForward(SUCCESS);
        } else {
            manterSituacaoImovelForm.setMensagem(situacaoImovel.getPRetMensagem());
            return mapping.findForward(FAIL);
        }
     
    }
    
}

Bom vamos lá.

1 - Minha dúvida é como vou fazer para que a actionPrincipal chame a actionFilha?
2- Tenho que mapear a actionPrincipal no struts-config? se sim, tenho que chamar um jsp, um form?
3- Tem algum material na net que fale sobre este assunto?
4- a ideia é que tudo que for feito no projeto passe pela actionPrincipal sendo que se o usuario nao estiver logado a actionPrincipal não chame as outras, mesmo digitando diretamente o endereco na url nao funcione

Peço a ajuda de vcs estou quebrando a cabeça com isso, valeu galera :smiley:

O execute(…) sempre é chamado… No seu struts-config.xml, basta você mapear a sua action filha.

sim eu sei, mais não solucionou meu problema!!!

Diogo, não entendi bem sua dúvida então… Tenta explicar de outra forma.

Bom eu preciso ter uma actionPrincipal que extend a action do Struts e as demais action extends a actionPrincipal. Porem não consigo fazer a logica para o funcionamento da principal, resumindo seria isso.

Se eu entendi bem, você quer à partir da ActionPrincipal delegar as tarefas para as actions filhas, correto?
Se for isso mesmo, você está indo pelo caminho errado, instanciando outras Actions para lidar com as requisições. Te recomendo dar uma estudada no padrão Command, com ele você vai conseguir encapsular de forma apropriada as ações que seu sistema vai executar.

Blz? Flw! :thumbup:

E isso mesmo que eu preciso von.juliano, pode me dar mais detalhes sobre o assunto…

Diogo, mas por qual motivo você quer que uma classe Pai seja responsável pelo gerenciamento de uso das actions filhas?

Ainda não tenho muita experiência na aplicação de Patterns, então se alguém mais experiente poder opinar na minha explicação à seguir, seria legal :wink:

Se você for fazer da forma anterior, você teria que fazer verificações para saber qual action instanciar, usando inúmeros ifs, o que não é o ideal num sistema orientado a objetos.
Utilizando Command, você define uma interface:

public interface Command { public void execute(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws DeuPauException; }Agora todas as suas classes que vão lidar com as ações vão implementar Command.

[code]public class ManterSituacaoImovelCommand implements Command {

public void execute(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws DeuPauException {
	// Faz o que tem que fazer aqui
}

}[/code]Até agora o problema não foi solucionado, pois você ainda teria que fazer verificações para saber qual implementação de Command usar. Como eu disse, sou pouco experiente e fica ainda mais dificil aplicar esse pattern junto ao Struts (os exemplos dos livros são diferentes :mrgreen: ), então vou sugerir uma solução que creio não ser a melhor, mas que acho viável.

Você pode ter uma classe CommandFactory com o método getCommand, que pode lhe fornecer o command apropriado, a partir de algum parâmetro. Supondo que você esteja chamando o command da Action, e que você faça uma action para cada coisa, você pode usar o nome da própria Action como parâmetro. Na classe CommandFactory você teria um HashMap que contém o nome de cada command associado ao nome da action que o chama. Com o nome do Command, você pode instancia-lo via Reflection e devolver para a Action. Fazendo dessa forma, suas actions teriam apenas o seguinte no método execute:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ try { Command command = CommandFactory.getCommand(getClass().getName()); command.execute(ActionForm form, HttpServletRequest request, HttpServletResponse response); } catch (DeuPauException e) { return mapping.findForward("ERROR"); } return mapping.findForward("SUCCESS"); }Como eu disse, creio que não seja a solução ideal, pois você teria que ficar inserindo os valores no HashMap à medida que o sistema cresce, mas ao menos limita-se à isso. Só com struts isso tb é mais complicado, se você usar Spring, fica mais fácil :wink:

Gostaria mesmo que o mais experientes fizessem críticas e sugestões. Vejo que aprendi bastante escrevendo esse post! :smiley:

Flw!

Boa Tarde,
Somos de uma indústria de grande porte, e estamso com vagas em aberto para Programdores Java de todos os níveis.
Os interessados favor enviarem currículo para cbassan@stillnet.com.br
Aguardo um retorno.

Suellen, é melhor você criar um tópico com o assunto e pedir para que lhe mandem um e-mail.
Abraço.

Boa Tarde,
Somos de uma indústria de grande porte, e estamso com vagas em aberto para Programdores Java de todos os níveis.
Os interessados favor enviarem currículo para cbassan@stillnet.com.br
Aguardo um retorno.

Bom galera adorei as respostas e o que realmente me chamou a atencão e creio que ira solucionar meu problemas aqui na empresa é o assunto dos command como e onde posso achar material para que eu possa dar uma estudada ou ate mesmo me dando uma ideia de como fazer isso de acordo com minhas actions que coloquei logo acima, espero a ajuda de vcs :smiley:

Aplicar padrões requer muito estudo. Recomedo os seguintes livros:
http://www.submarino.com.br/books_productdetails.asp?ProdTypeId=1&ProdId=93924&St=BL11828
http://www.submarino.com.br/books_productdetails.asp?ProdTypeId=1&ProdId=1138065&St=BL11828

Blz? Flw! :thumbup: