Struts LookupDispatch versus EventDispatch

No Struts, tão logo você começa a criar uma grande quantidade de action-mappings, em geral dois por cada página JSP com formulário (um para a entrada incial e um para o submit), rapidamente ou você se perde num emaranhado de actions e forwards, ou descobre que pode estruturar melhor, utilizando um único action — ou no máximo dois — por diálogo, com o uso de um despachante (dispatcher) que identifica e executa cada operação específica.

No Struts 1.x, existe uma classe action LookupDispatchAction capaz de comportar vários métodos de ação distintos. Desde a versão 1.2.9, outra alternativa é a classe EventDispatchAction.

As duas alternativas são similares e visam agregar em uma única classe action vários métodos de ação correlacionados a um mesmo recurso web. São casos típicos dos formulários de diálogo com múltiplos botões submit e formulários de entrada/edição de dados (CRUD).

No LookupDispatch, você define um nome de parâmetro HTTP (tipicamente o nome dos botões submit) que fornece o método a ser chamado (correspondendo assim ao rótulo do botão). Já no EventDispatch você define uma lista de nome de parâmetros que corresponderão a cada método a ser chamado. O EventDispatch é mais prático, pois basta definir a propriedade de nome (name, o property do Struts) de cada botão submit com o método de ação desejado, sem depender do rótulo (value) do botão. E para a chamada inicial dos formulários, tipicamente vindo de um link em que ainda nenhum botão foi ativado, em ambos os Actions pode-se definir um método padrão chamado na ausência do parâmetro específico.

Há ainda uma variante equivalente ao mecanismo do EventDispatchAction, compreendendo utilizar um objeto EventActionDispatcher em conjunto com uma classe Action qualquer, chamando o método execute() do objeto despachante no método execute() do objeto de ação.

Enquanto isso, vamos acompanhando as evoluções e novos recursos do Struts, que já teve a versão 1.3.5 lançada oficialmente em 17 de setembro de 2006 (em beta desde 18 de agosto) — agora chamado Struts 1 — e caminha para a versão 2.0 (Struts 2), incorporando os conceitos e recursos do framework WebWork, que teve o código-fonte doado pela OpenSymphony para se integrar ao projeto Struts.

Para saber mais: