Você não deve implementar mais o execute(...) quando está extendendo DispatchAction.
O execute da classe DispatchAction é executado inicialmente, e ele verifica o valor do seu parameter. E usando reflection, ele invoca o metódo referente ao valor do seu parameter.
Então, em suma, sua action terá somente os métodos referentes as ações, e não mais será necessário o controle para ver qual o método executar.
Exemplo
A super class GenericAction é filha de DispatchAction
public class UsuarioAction extends GenericAction {
private UsuarioBD bd = UsuarioBD.getInstance();
private Usuario usuario = new Usuario();
public ActionForward iniciar( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws DaoException {
return go(Constantes.USUARIO_ACTION_INICIAR);
}
public ActionForward logar( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws DaoException {
processValidationRules();
try {
populateObject(usuario);
} catch (DaoException e) {
setErrors("mensagem.usuarioaction.logar.erro.cast");
return iniciar(mapping, form, request, response);
}
try{
usuario = bd.login(usuario);
} catch (DaoException e) {
setErrors(e.getMessage());
return iniciar(mapping, form, request, response);
}
setObjectSession(Constantes.USUARIO_SESSAO, usuario);
return go(Constantes.USUARIO_ACTION_LOGAR);
}
public ActionForward logout( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws DaoException {
invalidateSession();
return iniciar(mapping, form, request, response);
}
}
<struts-config>
<form-beans>
<form-bean name="usuarioForm" type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="login" type="java.lang.String" />
<form-property name="senhaWeb" type="java.lang.String" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/usuario"
parameter="service"
type="sgv.view.action.UsuarioAction"
name="usuarioForm"
validate="true"
scope="request">
<forward name="logar" path="tiles.usuario.login" />
<forward name="home" path="tiles.usuario.home" />
</action>
</action-mappings>
</struts-config>
No jsp, eu seto um textfield tipo hidden com o name=service e com o valor igual ao método que eu quero que seja executado na action.
Abraço