Classe comum a todo projeto e Action, DispatchAction

Bom dia pessoal quero criar uma classe chamada AmbienteAction que ira estender de Action e quero implementar o método execute onde vou mandar uma Collection para minha pagina JSP onde sera montado o menu da aplicação, depois quero criar minhas classes ClienteAction, FornecedorAction todas estendendo de AmbienteAction e implementando os métodos com DispatchAction (Delete, Insert, Update…) tem como eu fazer isso ou o que estou querendo é demais :slight_smile:

Ah tb queria aproveitar e colocar nessa classe AmbienteAction para verificar se existe uma sessão do usuario ativa…

Minha classe AmbienteAct que gostaria de usar como base para o restante.

public class AmbienteAct extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		Collection minhaArvore = ArvoreDAO.getInstance().listaTodos();
		request.setAttribute("minhaArvore", minhaArvore);				
		return mapping.findForward("sucesso");
		
	}
	
}

Agora gostaria de criar minha as minhas classes onde quero implementar os metodos com DispatchAction, tem como? alguém tem uma sugestão melhor?

valeu

Estou fazendo uma aplicação onde eu fiz o seguinte.

Eu criei uma classe DefaultAction que implementa os métodos update, insert, list, remove, retrieve. Procurei deixá-la de uma forma bem abstrata para que esses métodos identificassem os forms que são enviados pela requisição e enviassem os beans já populados para minha camada de negócio.

Assim eu criei as minhas classes de Action q extendem de DefaultAction essas manipulações básicas do banco. Qualquer pesquisa no banco ou outro método que venha ter uma característica diferente é só implementá-los nessas classes.

Tb utilizei uma interface GenericDAO para ter os métodos update, insert, list, remove e retrieve. Assim em minha classe BusinessDelegate eu recebo um objeto que é meu bean populado, identifico esse meu bean e chamo meu respectivo DAO.

Para identificar os forms eu criei uma classe Util que identifica e copia suas propriedades para meu bean. Assim eu envio para minha camada de negócio somente meus bean e não meus forms.

Eu utilizei factory para identificar os tipos de objetos q são passados para a camada de negócio e para os DAOs.

Atachei as classes BusinessDelegate, Util e DefaultAction para vc dar uma olhada.

Qualquer dúvida é só falar.

falows!

Fiz um projeto com isso e ficou bastante legal, usando Template Method e Bussiness Delegate…

Funciona assim:

Criei um DefaultDispatchAction extend DispatchAction, implementando todos os métodos que um poderia ter na aplicação (insert, update, delete, etc.) como final. Dentro da mesma classe, eu tinha os métodos abstratos, com a mesma assinatura dos métodos final’s, com um nome bastante parecido (tipo doInsert, doUpdate). E dentro de cada método final, eu checava o acesso e, caso verdadeiro, repassava a chamada para o metodo do* correspondetente… caso falso, retornava uma pagina de erro…

Quando eu colocava um novo XXXAction que extendesse deste DefaultDispatchAction , eu era obrigado a implementar os métodos abstratos…

Lá no Struts Config, quando eu coloco a chamada para o XXXAction…

O funcionamento era o seguinte:

  1. doGet para o ActionServlet
  2. RequestDispatcher no ActionServlet
  3. execute no DispatchAction
  4. chamada do método passado no XXXAction
  5. Não encontrava, repassava para o super (DefaultDispatchAction )
  6. Encontrou… executava o check
  7. Check == OK
    7.1. repassava para o XXXAction no método do*
    7.2. retornava um ActionForward para o DefaultDispatchAction
    7.3. retorn para o Action
  8. Check == NOK
    8.1. ActionForward de erro retornado

Duvidas… rodrigo.allemand@gmail.com