02 Struts Actions

9,326 views
9,213 views

Published on

Struts Actions

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,326
On SlideShare
0
From Embeds
0
Number of Embeds
444
Actions
Shares
0
Downloads
285
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

02 Struts Actions

  1. 1. Jakarta Struts: Processare le richieste con gli Action Objects Struts Versione 1.2 Core Servlets & JSP book: www.coreservlets.com More Servlets & JSP book: www.moreservlets.com Servlet/JSP/Struts/JSF Training: courses.coreservlets.com Traduzione a cura di JavaStaff.com
  2. 2. Agenda <ul><li>Flusso di controllo di Struts </li></ul><ul><li>I sei passi base per l’utilizzo di Struts </li></ul><ul><ul><li>Per implementare il flusso di controllo </li></ul></ul><ul><li>Esempi </li></ul>
  3. 3. Il flusso di controllo di Struts JSP Form Determina la Action Action Sceglie la pagina JSP JSP richiesta .../SomeForm.jsp Invio form richiesta .../ blah .do invoca esegue un metodo Ritorna condizione Forward verso Ritorna risultato finale struts-config.xml
  4. 4. Il flusso di controllo di Struts <ul><li>L’utente richiede un form </li></ul><ul><ul><li>Per ora utilizziamo il semplice HTML per costruire la form </li></ul></ul><ul><ul><ul><li>Successivamente utilizzeremo il tag Struts html:form </li></ul></ul></ul><ul><li>Il form è inviato ad un URL della forma blah .do. </li></ul><ul><ul><li>Questo indirizzo è mappato ad un Action class nel file di configurazione struts-config.xml </li></ul></ul><ul><li>Il metodo execute dell’oggetto Action viene invocato </li></ul><ul><ul><li>Uno degli argomenti è un form bean che è automaticamente creato e le cui proprietà sono popolate automaticamente con i dati che arrivano dal form </li></ul></ul><ul><ul><li>L’oggetto Action dopo invoca la business logic e la data-access logic, mettendo i risultati in dei bean che vengono salvati in uno scope di request, session o application. </li></ul></ul><ul><ul><li>L’Action utilizza mapping.findForward per ritornare una condizione, e le condizioni sono mappate nel file struts-config.xml per effettuare il forward verso diverse pagine JSP. </li></ul></ul><ul><li>Struts ridirige le richieste verso la pagina JSP appropriata </li></ul><ul><ul><li>La pagina può utilizzare bean:write o l’EL di JSP 2.0 per stampare le proprietà dei bean </li></ul></ul><ul><ul><li>La pagina può utilizzare bean:message per stampare determinate stringhe </li></ul></ul>
  5. 5. I sei passi base per utilizzare Struts <ul><li>Modificare struts-config.xml. Si utilizza WEB-INF/struts-config.xml per: </li></ul><ul><ul><li>Mappare gli indirizzi in entrata.do verso le classi Action </li></ul></ul><ul><ul><li>Mappare le condizioni di ritorno della pagine JSP </li></ul></ul><ul><ul><li>Dichiarare i form beans che devono essere usati. </li></ul></ul><ul><ul><li>Riavviate il server una volta modificato il file struts-config.xml . </li></ul></ul><ul><li>Definire un form bean. </li></ul><ul><ul><li>Questo bean è una classe che estende ActionForm e rappresenterà i dati inviati dall’utente. E’ automaticamente valorizzato quando la form di input viene inviata. La definizione dei bean è rinviata alla prossima lezione. </li></ul></ul>
  6. 6. I sei passi base per utilizzare Struts <ul><li>Creare i bean per il risultato. </li></ul><ul><ul><li>Nell’architettura MVC architecture, il codice relativo alla business-logic e data-access crea i risultati e le pagine JSP li presentano. Per trasferire i risultati da un layer all’altro si utilizzano dei bean dove vengono memorizzati questi valori. Questi bean differiscono dai form bean perchè non hanno bisogno di estendere alcuna classe particolare e rappresentano l’output del processo computazionale, non l’input. I bean verranno discussi nella prossima lezione. </li></ul></ul><ul><li>Definire una classe Action per gestire le richieste. </li></ul><ul><ul><li>Il file struts-config.xml definisce le classi Action classes che gestiscono le richieste per differenti URL. Gli oggetti Action hanno bisogno di fare il vero lavoro: invocare la business-logic (e/o data-access-logic), salvare dei risultati in dei bean e definisce il tipo di situazione appropriata in base ai risultati (dati mancanti, errore sul database, categoria di successo 1, categoria di successo 2 etc. etc.). Il file struts-config.xml dopo decide quale pagina JSP deve essere applicata a questa situazione. </li></ul></ul>
  7. 7. I sei passi base per utilizzare Struts <ul><li>Creare il form che invoca blah .do. </li></ul><ul><ul><li>Creare un form di input la cui ACTION corrisponde ad uno degli indirizzi contenuti nel file struts-config.xml. </li></ul></ul><ul><ul><li>In una lezione successiva si parlerà dei vantaggi dell’utilizzo del tag html:form di Struts per costruire i form di input. </li></ul></ul><ul><li>Display dei risultati nelle JSP. </li></ul><ul><ul><li>Visto che Struts è costruito sul pattern MVC, queste pagine JSP dovrebbero evitare elementi di scripting ove possibile. Si può usare il tag bean:write, ma anche l’EL di JSP 2.0 è alternativa possibile. </li></ul></ul><ul><ul><li>Nella maggior parte dei casi, le pagine JSP hanno senso solo quando la richiesta è inviata attraverso una Action. </li></ul></ul><ul><ul><li>Se le pagine JSP hanno senso indipendentemente dalla Action, allora queste pagine dovrebbero essere poste in una sottodirectory della Web application e le entry di forward entries nel file struts-config.xml dovrebbero riportare <forward ... redirect=&quot;true&quot;/>. </li></ul></ul>
  8. 8. Esempio 1: Mapping di un risultato <ul><li>URL </li></ul><ul><ul><li>http://hostname/StrutsActions/register1.do </li></ul></ul><ul><li>Action Class </li></ul><ul><ul><li>RegisterAction1 </li></ul></ul><ul><ul><ul><li>RegisterAction1 estende Action ed è presente nel package di com.javastaff.strutsaction. </li></ul></ul></ul><ul><ul><ul><li>Il metodo execute di RegisterAction1 ritorna sempre &quot;success&quot; </li></ul></ul></ul><ul><li>Pagina dei risultati </li></ul><ul><ul><li>/WEB-INF/results/confirm.jsp </li></ul></ul><ul><ul><ul><li>L’URL mostrato sarà sempre register1.do </li></ul></ul></ul>
  9. 9. Passo 1A (Modificare struts-config.xml) <ul><li>Mappare gli indirizzi in arrivo .do con delle classi Action </li></ul><ul><ul><li>In questo caso abbiamo deciso che la classe RegisterAction1 deve gestire le richieste per l’indirizzo register1.do. Per assolvere a questo compito, dobbiamo aggiungere una entry action al tag action-mappings, dove la action deve avere i seguenti attributi. </li></ul></ul><ul><ul><ul><li>path : il path relativo che deve essere mappato sulla Action, tranne l’estensione .do. Così il path=&quot;/register1&quot; si riferisce all’URL http://hostname/webAppName/register1.do. </li></ul></ul></ul><ul><ul><ul><li>type : il nome completo della classe Action che deve essere invocato per gestire la richiesta. </li></ul></ul></ul><ul><li><action-mappings> </li></ul><ul><li><!-- .do implied automatically --> </li></ul><ul><li><action path=&quot;/register1&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction1&quot;> </li></ul><ul><li>... </li></ul><ul><li></action> </li></ul><ul><li></action-mappings> </li></ul>
  10. 10. Passo 1B (Modificare struts-config.xml) <ul><li>Mappare le condizioni di ritorno con delle pagine JSP </li></ul><ul><ul><li>In questo caso utilizziamo l’elemento forward per dire che la pagina confirm.jsp viene applicata quando il metodo execute di RegisterAction1 ritorna &quot;success&quot;, come segue : </li></ul></ul><ul><ul><li><forward name=&quot;success&quot; path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul></ul><ul><ul><li>Nota: se lo stesso forward è utilizzato da azioni multiple, è possibile inserirlo in una sezione global-forwards section (prima di action-mappings) invece che metterlo dentro la action. </li></ul></ul><ul><ul><li><global-forwards> </li></ul></ul><ul><ul><li><forward name=&quot;success&quot; path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul></ul><ul><ul><li></global-forwards> </li></ul></ul>
  11. 11. Passo 1 (Modificare struts-config.xml) – Il file struts-config.xml finale <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> </li></ul><ul><li><!DOCTYPE struts-config PUBLIC ... > </li></ul><ul><li><struts-config> </li></ul><ul><li><action-mappings> </li></ul><ul><li><action path=&quot;/register1&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction1&quot;> </li></ul><ul><li><forward name=&quot;success&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></action> </li></ul><ul><li></action-mappings> </li></ul><ul><li></struts-config> </li></ul>
  12. 12. Passo 2 e 3 <ul><li>Definire un form bean. </li></ul><ul><ul><li>I bean sono rimandati alla prossima lezione, quindi questo step è omesso per il momento. </li></ul></ul><ul><li>Creare dei result bean. </li></ul><ul><ul><li>I bean sono rimandati alla prossima lezione, quindi questo step è omesso per il momento. </li></ul></ul>
  13. 13. Passo 4 (Definire una classe Action per gestire le richieste) <ul><li>Le sottoclassi Action dovrebbero… essere in un package . </li></ul><ul><ul><li>In questo caso abbiamo package com.javastaff.strutsaction; </li></ul></ul><ul><ul><ul><li>Questo significa che il file class dovrebbe andare in web_app /WEB-INF/classes/com/javastaff/strutsaction. </li></ul></ul></ul><ul><li>Le sottoclassi Action dovrebbero… aggiungere gli import specifici per Struts o qualsiasi altro importo necessario . </li></ul><ul><ul><li>In questo caso abbiamo </li></ul></ul><ul><ul><li>import javax.servlet.http.HttpServletRequest; </li></ul></ul><ul><ul><li>import javax.servlet.http.HttpServletResponse; </li></ul></ul><ul><ul><li>import org.apache.struts.action.Action; </li></ul></ul><ul><ul><li>import org.apache.struts.action.ActionForm; </li></ul></ul><ul><ul><li>import org.apache.struts.action.ActionMapping; </li></ul></ul><ul><ul><li>import org.apache.struts.action.ActionForward; </li></ul></ul>
  14. 14. Passo 4 (Definire una classe Action per gestire le richieste) <ul><li>Le sottoclassi Action dovrebbero ... estendere Action </li></ul><ul><li>Le sottoclassi Action dovrebbero ... effettuare l’override del metodo execute </li></ul><ul><ul><li>In questo caso abbiamo </li></ul></ul><ul><li>public class RegisterAction1 extends Action { </li></ul><ul><li>public ActionForward </li></ul><ul><li>execute (ActionMapping mapping, </li></ul><ul><li>ActionForm form, </li></ul><ul><li>HttpServletRequest request, </li></ul><ul><li>HttpServletResponse response) </li></ul><ul><li>throws Exception { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  15. 15. Passo 4 (Definire una classe Action per gestire le richieste) <ul><li>Le sottoclassi Action dovrebbero... Ritornate mapping.findForward . </li></ul><ul><ul><li>Il metodo execute dovrebbe avere uno o più valori di ritorno. </li></ul></ul><ul><ul><li>Questi valori corrisponderanno a specifiche pagine JSP definite nelle entry forward del file struts-config.xml. In questo caso ritorniamo semplicemente &quot;success&quot; in ogni situazione. </li></ul></ul><ul><li>public ActionForward </li></ul><ul><li>execute(ActionMapping mapping, </li></ul><ul><li>ActionForm form, </li></ul><ul><li>HttpServletRequest request, </li></ul><ul><li>HttpServletResponse response) </li></ul><ul><li>throws Exception { </li></ul><ul><li>return(mapping.findForward(&quot;success&quot;)); </li></ul><ul><li>} </li></ul>
  16. 16. Passo 4 (Definire una classe Action per gestire le richieste) – Codice finale <ul><li>package com.javastaff.strutsaction; </li></ul><ul><li>import javax.servlet.http.HttpServletRequest; </li></ul><ul><li>import javax.servlet.http.HttpServletResponse; </li></ul><ul><li>import org.apache.struts.action.Action; </li></ul><ul><li>import org.apache.struts.action.ActionForm; </li></ul><ul><li>import org.apache.struts.action.ActionMapping; </li></ul><ul><li>import org.apache.struts.action.ActionForward; </li></ul><ul><li>public class RegisterAction1 extends Action { </li></ul><ul><li>public ActionForward execute(ActionMapping mapping, ActionForm form, </li></ul><ul><li> HttpServletRequest request, HttpServletResponse response) </li></ul><ul><li> throws Exception { </li></ul><ul><li>return mapping.findForward(&quot;success&quot;); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  17. 17. Passo 5 (Creare il form che richiama register1 .do) <ul><li>Abbiamo bisogno di un form HTML che richiama http://hostname/struts-actions/register1.do. </li></ul><ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>New Account Registration</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>New Account Registration</H1> </li></ul><ul><li><FORM ACTION=&quot;register1.do&quot; METHOD=&quot;POST&quot;> </li></ul><ul><li>Email address: <INPUT TYPE=&quot;TEXT&quot; NAME=&quot;email&quot;><BR> </li></ul><ul><li>Password: <INPUT TYPE=&quot;PASSWORD&quot; NAME=&quot;password&quot;><BR> </li></ul><ul><li><INPUT TYPE=&quot;SUBMIT&quot; VALUE=&quot;Sign Me Up!&quot;> </li></ul><ul><li></FORM> </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  18. 18. Passo 6 (Display dei risultati nella JSP) <ul><li>In generale, a questo punto possono esserci diverse pagine </li></ul><ul><ul><li>Ogni pagina può corrispondere ai diversi valori che vengono ritornati dal metodo execute della Action invocata. </li></ul></ul><ul><li>Nel file struts-config.xml, ogni pagina JSP è dichiarata in una entry forward con la relativa action. </li></ul><ul><ul><li>In questo semplice caso l’unico valore di ritorno è &quot;success&quot;, così /WEB-INF/results/confirm.jsp è usata in tutti i casi. </li></ul></ul><ul><li>Questa pagina JSP mostrerà un semplice messaggio (come potete vedere nella prossima slide) </li></ul>
  19. 19. Passo 6 (Display dei risultati nella JSP) – Codice finale <ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>Success</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>You have registered successfully.</H1> </li></ul><ul><li>Congratulations </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  20. 20. Esempio 1: Risultati <ul><li>Il form HTML viene invocato con l’URL http://localhost/StrutsAction/form.html </li></ul>
  21. 21. Esempio 1: Risultati <ul><li>Questo form viene riempito ed in seguito inviato </li></ul><ul><ul><li>L’ ACTION del form è register1.do </li></ul></ul><ul><li>Questo indirizzo è mappato nel file di configurazione struts-config.xml </li></ul><ul><ul><li>E’ associato alla classe RegisterAction1, della quale viene invocato il metodo execute. </li></ul></ul><ul><li>Questo metodo ritorna mapping.findForward </li></ul><ul><ul><li>Con il valore &quot;success“, definito staticamente </li></ul></ul><ul><li>Questo valore è mappato in struts-config.xml </li></ul><ul><ul><li>Gestisce il forward verso /WEB-INF/results/confirm.jsp, </li></ul></ul><ul><ul><ul><li>Che è il risultato finale mostrato all’utente. </li></ul></ul></ul><ul><ul><ul><li>Tuttavia visto che la pagina è invocata con RequestDispatcher.forward, e non response.sendRedirect, l’URL mostrato all’utente è register1.do, non confirm.jsp. </li></ul></ul></ul>
  22. 22. Esempio 1: Risultati
  23. 23. Esempio 2: Mapping multipli per il risultato <ul><li>URL </li></ul><ul><ul><li>http://hostname/StrutsAction/register2.do </li></ul></ul><ul><li>Action Class </li></ul><ul><ul><li>RegisterAction2. </li></ul></ul><ul><ul><ul><li>Il metodo execute di RegisterAction2 ritorna &quot;success&quot;, &quot;bad-address&quot;, o &quot;bad-password&quot; </li></ul></ul></ul><ul><li>Pagine dei risultati </li></ul><ul><ul><li>/WEB-INF/results/confirm.jsp, </li></ul></ul><ul><ul><li>/WEB-INF/results/bad-address.jsp, e </li></ul></ul><ul><ul><li>/WEB-INF/results/bad-password.jsp </li></ul></ul><ul><li>Nuova feature di questo esempio </li></ul><ul><ul><li>L’uso di forward multipli in un elemento action. </li></ul></ul>
  24. 24. Passo 1 (Modificare struts-config.xml) <ul><li>Mappare gli indirizzi .do con le classi Action </li></ul><ul><ul><li>In questo caso utilizziamo RegisterAction2 per gestire le richieste relative a register2.do (come prima, notare che il .do è implicito). </li></ul></ul><ul><li>Mappare le condizioni ritornate con delle pagine JSP </li></ul><ul><ul><li>In questo caso utilizziamo degli elementi forward multipli, uno per ogni possibile valore di ritorno del metodo execute di RegisterAction2. </li></ul></ul><ul><li>Dichiarare tutti i form bean che devono essere usati. </li></ul><ul><ul><li>I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. </li></ul></ul>
  25. 25. Passo 1 (Modificare struts-config.xml) – Codice finale <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> </li></ul><ul><li><!DOCTYPE struts-config PUBLIC ... > </li></ul><ul><li><struts-config> </li></ul><ul><li><action-mappings> </li></ul><ul><li>... </li></ul><ul><li><action path=&quot;/register2&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction2&quot;> </li></ul><ul><li><forward name=&quot;bad-address&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorEmail.jsp&quot;/> </li></ul><ul><li><forward name=&quot;bad-password&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorPassword.jsp&quot;/> </li></ul><ul><li><forward name=&quot;success&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></action> </li></ul><ul><li></action-mappings> </li></ul><ul><li></struts-config> </li></ul>
  26. 26. Passi 2 e 3 <ul><li>Definire un form bean. </li></ul><ul><ul><li>I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. </li></ul></ul><ul><li>Creare i bean dei risultati. </li></ul><ul><ul><li>I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. </li></ul></ul>
  27. 27. Passo 4 (Definire una classe Action per gestire le richieste) <ul><li>Simile al precedente esempio tranne per il fatto che ora inseriamo diverse entry nel mapping.findForward </li></ul><ul><ul><li>Ritorniamo un &quot;bad-address&quot; se l’email non è presente nel form, se è più piccola di 3 caratteri o se manca il carattere &quot;@&quot;. </li></ul></ul><ul><ul><li>Ritorniamo &quot;bad-password&quot; se la password è mancante o se è più piccola di 6 caratteri. </li></ul></ul><ul><ul><li>Altrimenti ritorniamo &quot;success&quot;. </li></ul></ul><ul><li>In questo semplice esempio utilizziamo esplicitamente request.getParameter. </li></ul><ul><ul><li>Nelle lezioni successive vedremo come Struts popola automaticamente un bean a partire dai dati della request HTTP. </li></ul></ul>
  28. 28. Passo 4 (Definire una classe Action per gestire le richieste) – Codice finale <ul><li>public class RegisterAction2 extends Action { </li></ul><ul><li>public ActionForward </li></ul><ul><li>execute(ActionMapping mapping, </li></ul><ul><li>ActionForm form, </li></ul><ul><li>HttpServletRequest request, </li></ul><ul><li>HttpServletResponse response) </li></ul><ul><li>throws Exception { </li></ul><ul><li>String email = request.getParameter(&quot;email&quot;); </li></ul><ul><li>String password = request.getParameter(&quot;password&quot;); </li></ul><ul><li>if ((email == null) || </li></ul><ul><li>(email.trim().length() < 3) || </li></ul><ul><li>(email.indexOf(&quot;@&quot;) == -1)) { </li></ul><ul><li>return(mapping.findForward(&quot;bad-address&quot;)); </li></ul><ul><li>} else if ((password == null) || </li></ul><ul><li>(password.trim().length() < 6)) { </li></ul><ul><li>return(mapping.findForward(&quot;bad-password&quot;)); </li></ul><ul><li>} else { </li></ul><ul><li>return(mapping.findForward(&quot;success&quot;)); </li></ul><ul><li>}}} </li></ul>
  29. 29. Passo 5 (Creare il form che invoca blah .do) <ul><li>Abbiamo bisogno di un form che invoca http://hostname/StrutsAction/register2.do. </li></ul><ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>New Account Registration</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>New Account Registration</H1> </li></ul><ul><li><FORM ACTION=&quot;register2.do&quot; METHOD=&quot;POST&quot;> </li></ul><ul><li>Email address: <INPUT TYPE=&quot;TEXT&quot; NAME=&quot;email&quot;><BR> </li></ul><ul><li>Password: <INPUT TYPE=&quot;PASSWORD&quot; NAME=&quot;password&quot;><BR> </li></ul><ul><li><INPUT TYPE=&quot;SUBMIT&quot; VALUE=&quot;Sign Me Up!&quot;> </li></ul><ul><li></FORM> </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  30. 30. Passo 6 (Visualizzare i risultati in una JSP) Prima possibile pagina <ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>Illegal Email Address</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>Illegal Email Address</H1> </li></ul><ul><li>Address must be of the form username@host. </li></ul><ul><li>Please <A HREF=“form2.html&quot;> </li></ul><ul><li>try again</A>. </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  31. 31. Passo 6 (Visualizzare i risultati in una JSP) Seconda possibile pagina <ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>Illegal Password</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>Illegal Password</H1> </li></ul><ul><li>Password must contain at least six characters. </li></ul><ul><li>Please <A HREF=“form2.html&quot;> </li></ul><ul><li>try again</A>. </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  32. 32. Passo 6 (Visualizzare i risultati in una JSP) confirm.jsp già utilizzata <ul><li><!DOCTYPE ...> </li></ul><ul><li><HTML> </li></ul><ul><li><HEAD><TITLE>Success</TITLE></HEAD> </li></ul><ul><li><BODY BGCOLOR=&quot;#FDF5E6&quot;> </li></ul><ul><li><CENTER> </li></ul><ul><li><H1>You have registered successfully.</H1> </li></ul><ul><li>Congratulations </li></ul><ul><li></CENTER> </li></ul><ul><li></BODY></HTML> </li></ul>
  33. 33. Esempio 2: Risultati (Form iniziale)
  34. 34. Esempio 2: Risultati (Indirizzo sbagliato)
  35. 35. Esempio 2: Risultati (Password sbagliata)
  36. 36. Esempio 2: Risultati (Successo)
  37. 37. Combinare condizioni condivise per i vari mapping <ul><li>Idea </li></ul><ul><ul><li>Se la stessa condizione è mappata sulla stessa pagina JSP in diverse azioni, è possibile muovere questo forward in una sezione global-forwards per evitare inutili ripetizioni </li></ul></ul><ul><li>Sintassi </li></ul><ul><ul><li>La sezione global-forwards precede action-mappings </li></ul></ul><ul><ul><li>Le entry di forward in global-forwards hanno la stessa sintassi e lo stesso comportamento delle entry di forward nelle action </li></ul></ul><ul><li>Esempio </li></ul><ul><li><global-forwards> </li></ul><ul><li><forward name=&quot;success&quot; path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></global-forwards> </li></ul>
  38. 38. Combinare condizioni condivise per i vari mapping: vecchia configurazione <ul><li><action-mappings> </li></ul><ul><li><action path=&quot;/register1&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction1&quot;> </li></ul><ul><li><forward name=&quot;success&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></action> </li></ul><ul><li><action path=&quot;/register2&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction2&quot;> </li></ul><ul><li><forward name=&quot;bad-address&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorEmail.jsp&quot;/> </li></ul><ul><li><forward name=&quot;bad-password&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorPassword.jsp&quot;/> </li></ul><ul><li><forward name=&quot;success&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></action> </li></ul><ul><li>... </li></ul><ul><li></action-mappings> </li></ul>
  39. 39. Combinare condizioni condivise per i vari mapping: nuova configurazione <ul><li><global-forwards> </li></ul><ul><li><forward name=&quot;success&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/confirm.jsp&quot;/> </li></ul><ul><li></global-forwards> </li></ul><ul><li><action-mappings> </li></ul><ul><li><action path=&quot;/register1&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction1&quot;> </li></ul><ul><li></action> </li></ul><ul><li><action path=&quot;/register2&quot; </li></ul><ul><li>type=&quot;com.javastaff.strutsaction.RegisterAction2&quot;> </li></ul><ul><li><forward name=&quot;bad-address&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorEmail.jsp&quot;/> </li></ul><ul><li><forward name=&quot;bad-password&quot; </li></ul><ul><li>path=&quot;/WEB-INF/results/errorPassword.jsp&quot;/> </li></ul><ul><li></action> </li></ul><ul><li>... </li></ul><ul><li></action-mappings> </li></ul>
  40. 40. Sommario <ul><li>Modificare struts-config.xml </li></ul><ul><ul><li>Mappare indirizzi blah .do su delle classi che estendono Action </li></ul></ul><ul><ul><li>Mappare le condizioni di return su delle pagine JSP </li></ul></ul><ul><ul><li>Dichiarare tutti i form bean che devono essere utilizzati. </li></ul></ul><ul><li>Definire un form bean </li></ul><ul><li>Creare un bean dei risultati </li></ul><ul><li>Definire una classe Action che gestisce le richieste </li></ul><ul><ul><li>Estendere Action </li></ul></ul><ul><ul><li>Effettuare l’override di execute() </li></ul></ul><ul><ul><li>Ritornare mapping.findForward </li></ul></ul><ul><li>Creare un form che invoca blah .do </li></ul><ul><li>Mostrare i risultati in una JSP </li></ul>

×