Affrontiamo in queste ultime lezioni aspetti più pratici nell'utilizzo del
framework, partendo dall'analisi di una serie di
Action standard; di seguito forniamo una descrizione di quelle più utilizzate nella pratica.
La prima è la
DispatchAction: nella logica di un'applicazione
Struts esegue il metodo execute() della Action, che corrisponde all'URL della richiesta effettuata dal client. Questo funzionamento si adatta poco alle situazioni nelle quali è necessario eseguire una serie di elaborazioni tra loro logicamente collegate. Tipico è l'esempio di operazioni CRUD (inserimento, cancellazione, lettura e aggiornamento) su una stessa tabella di un database. In una situazione del genere sarebbe poco raccomandabile definire una
Action per ciascuna singola operazione; si assisterebbe, infatti, a un proliferare di
Action nell'applicazione e quindi a una difficile gestione della stessa.
Struts risolve questa problematica introducendo la
org.apache.struts.actions.DispatchAction:
è assolutamente analoga ad una
Action base, ma fornisce la possibilità di invocare diversi metodi della stessa, purché il client specifichi il metodo da chiamare. In pratica essa
è come una Action che non ha un solo metodo execute(), ma ne ha n con nomi diversi; ognuno di questi metodi deve avere la stessa
signature del metodo
execute(). Ad esempio una
DispatchAction potrebbe avere i seguenti metodi:
public ActionForward add(ActionMapping mapping, ActionForm form,HttpServletRequest req, HttpServletResponse res)
throws IOException,ServletException;
public ActionForward remove(ActionMapping mapping, ActionForm form,HttpServletRequest req, HttpServletResponse res)
throws IOException,ServletException;
Affinché l'elaborazione della richiesta possa essere effettuata correttamente,
il client deve fornire nella request un parametro contenente il nome del metodo corrispondente. Questo parametro va ovviamente specificato nella definizione della
Action nello
struts-config.xml, nel seguente modo:
< action
path="/gestioneTabella"
type="it.esempio.GestioneTabellaAction"
name="gestioneTabellaForm"
scope="request"
input="/table.jsp"
parameter="metodo"/ >
Se quindi da una pagina
JSP si vuole invocare il metodo
add() della
Action GestioneTabellaAction sarà sufficiente specificare:
http://servername/context-root/gestioneTabella?metodo=add
Il nome del metodo può essere specificato in diversi modi, come un
hidden contenuto in un form HTML, oppure può essere impostato da una funzione JavaScript prima di eseguire la
submit() del form.