La struttura della LookupDiapatchAction è analoga a quella della DispatchAction, mentre cambia la modalità di scelta del metodo da eseguire. La classica situazione d'uso è quella in cui la scelta avviene mediante i button di un form. Le label dei button vengono associate alle key contenute nel
resource bundle dell'applicazione e lo sviluppatore le mappa ai metodi della
Action, mediante la definizione di un metodo così fatto:
protected Map getKeyMethodMap(ActionMapping mapping, ActionForm form,
HttpServletRequest request) { Map map = new HashMap();
map.put("bottone.leggi", "leggi"); map.put("bottone.inserisci", "inserisci"); return map;
}
Nel metodo viene definita una
HashMap, nella quale per ogni key è associato il nome di un metodo della
Action. In base a questo codice la definizione dei bottoni nella pagina
JSP sarà del seguente tipo:
< html:form action="/crud">
< html:submit property="method">
< bean:message key=" bottone.leggi ">
< /html:submit>
< html:submit property="method">
< bean:message key=" bottone.inserisci ">
< /html:submit>
< /html:form>
In questo modo è possibile avere una
Action di tipo
dispatch, i cui metodi sono attivabili dai button di un form di un'applicazione localizzata semplicemente scrivendo un metodo
getKeyMethodMap(), come descritto nelle righe precedenti.
La
org.apache.scaffold.http.BaseAction fornisce un metodo execute() base fatto come segue:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res)
throws Exception {
preProcess(mapping,form,request,response);
if (isErrors(request)) { return findFailure(mapping,form,request,response);
}
try { executeLogic(mapping,form,request,response);
}
catch (Exception e) { setException(request,e);
catchException(mapping,form,request,response);
}
finally { postProcess(mapping,form,request,response);
}
if (isErrors(request)) { return findFailure(mapping,form,request,response);
}
if ((isStruts_1_0()) && (isMessages(request))) { saveErrors(request,getMessages(request,false));
}
}
La BaseAction può essere usata come classe base di tutte le Action dell'applicazione, allo scopo di standardizzare la scrittura dei vari metodi execute(). Terminiamo la carrellata di azioni base, citando la
ForwardAction e la
IncludeAction, di minore importanza, ma utilissime nella pratica.
La prima consente di inoltrare il flusso dell'applicazione ad un'altra risorsa individuata mediante un
URI valido, mentre la seconda consente di aggiungere alla propria l'elaborazione effettuata da un'altra risorsa, quale ad esempio una
servlet.