DispatchAction ou Action

Boa tarder a todos, to com uma duvidazinha, queria saber qual e a difenrença de estender o DispatchAction do Action e quais as vantagens de ambos.

Att,

Alan Rodrigo.

http://www.guj.com.br/posts/list/32195.java
http://www.guj.com.br/posts/list/41083.java

Cara, o fórum tá cheio de material sobre isso, não levante um tópico sem dar uma pesquisada primeiro.

Flw! :thumbup:

A diferença é simples:

Quando você estende Action, não escolhe qual método da classe será executado, o método execute() é sempre chamado.

Estendendo DispatchAction, você pode criar divérsos métodos na classe para executar as suas ações, e o método que será executado depende do que foi submetido pelo form (ex: se a sua action tiver parameter=“method” definido no struts-config.xml, você deverá chamar http://aplicacao[:porta]/acao.do?[color=red]method=metodo01[/color]).

Na minha opinião estender o DispatchAction faz muito mais sentido. Para várias operações em uma mesma tabela do banco, por exemplo, (searchByName, searchById, insert, update, delete, etc…) é possível criar vários métodos em uma mesma DispatchAction, ao invés de criar uma Action para cada operação, o que aumentaria o número de classes e blocos de configuração no struts-config.xml para uma mesma finalidade.

O Action é mais antigo, o DispatchAction foi uma evolução em uma versão mais avançada do Struts quando reconheceram a necessidade de dar essa flexibilidade às classes de ação…

É um pouco uma questão de escolha pessoal, mas é importante pesar a coesão: agrupar o que pode estar em unidade, facilitando a manutenção do código, desagrupar as funcionalidades diferentes, permitindo uma baixa acoplagem, e assim por diante…

Eu sempre utilizo DispatchAction, porque mesmo que hoje a minha ação possua apenas um método, se futuramente eu precisar de mais uma funcionalidade na mesma ação basta adicionar mais um método.

Fox McCloud bela resposta muito útil.