Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Guida al framework Struts (14/15)
Scritto da Dario Guadagno il 25-02-2009 ore 12:20
Intel Parallel Studio XE
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:
  1. protected Map getKeyMethodMap(ActionMapping mapping, ActionForm form,
  2.                               HttpServletRequest request) {
  3.   Map map = new HashMap();
  4.   map.put("bottone.leggi", "leggi");
  5.   map.put("bottone.inserisci", "inserisci");
  6.   return map;
  7. }
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:
  1. < html:form action="/crud">
  2. < html:submit property="method">
  3. < bean:message key=" bottone.leggi ">
  4. < /html:submit>
  5. < html:submit property="method">
  6. < bean:message key=" bottone.inserisci ">
  7. < /html:submit>
  8. < /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:
  1. public ActionForward execute(ActionMapping mapping, ActionForm form, 
  2.                              HttpServletRequest req, HttpServletResponse res)
  3.                              throws Exception {
  4.  
  5.   preProcess(mapping,form,request,response);
  6.   if (isErrors(request)) {
  7.     return findFailure(mapping,form,request,response);
  8.   }
  9.   try {
  10.     executeLogic(mapping,form,request,response);
  11.   }
  12.   catch (Exception e) {
  13.     setException(request,e);
  14.     catchException(mapping,form,request,response);
  15.   }
  16.   finally {
  17.     postProcess(mapping,form,request,response);
  18.   }
  19.  
  20.   if (isErrors(request)) {
  21.     return findFailure(mapping,form,request,response);
  22.   }
  23.   if ((isStruts_1_0()) && (isMessages(request))) {
  24.     saveErrors(request,getMessages(request,false));
  25.   }
  26. }
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.
Precedente: Le closure nella versione 5.3 di PHP
Successiva: La fragilità di Internet (1/2)
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.361 secondi.