Struts2: il Redirect Result, qualche esempio
Il Redirect Result è uno dei result type predefiniti di struts2.
Il concetto di result, insieme a quello di action è alla base di Struts2. Ogni chiamata http si risolve con una action, e ogni action fa qualcosa (o anche nulla se è pigra) e restituisce un risultato, sotto forma di stringa.
L’action non sa come viene interpretato questo risultato, non sa se sarà un semplice redirect ad una jsp, un report o un download.
Come viene interpretato il risultato di una action viene deciso nella sua stessa definizione, nel file di configurazione di struts, utilizzando il result type relativo a quello che si vuole faccia l’action.
Che cosa è il Redirect Result
Il Redirect Result è il tipo di result che si usa per creare una nuova request verso una risorsa web. Ci sono tre parametri che possono essere utilizzati per la sua configurazione:
location: indica la risorsa web da raggiungere
parse: indica se il valore di location deve essere parsato per le espressioni ONGL
anchor: da la possibilità di speficare un’ancora all’interno della risorsa web da raggiungere.
Quindi la sua sintassi è questa:
<result name="success" type="redirect"> <param name="location">...</param> <param name="parse">true/false</param> <param name="anchor">...</param> </result> |
Alcune osservazioni su questi parametri:
location: è il default, il che significa che si può scrivere:
<result name="success" type="redirect"> <param name="parse">true/false</param> <param name="anchor">...</param> http://www.google.it </result> |
parse: è di default a true. Quindi può essere omesso se per esempio l’url da raggiungere viene passato come parametro.
anchor: è ovviamente facoltativo. Quindi, la configurazione minima per una action che esegue un redirect può essere:
<action name="vai-al-blog"> <result type="redirect">http://www.nicolacolonna.it</result> </action> |
Aggiungere dei parametri alla request
E’ possibile passare dei parametri alla request. In questo caso la risorsa web è una pagina jsp alla quale passiamo il parametro id:
<action name="risorsa-web"> <result type="redirect"> <param name="location">risorsaweb.jsp</param> <param name="id">42</param> </result> </action> |
Quindi, nel mio esempio, chiamare l’action:
http://localhost:8180/esempio-struts2-redirect/risorsa-web
equivale a chiamare l’url:
http://localhost:8180/esempio-struts2-redirect/risorsaweb.jsp?id=42
La parametrizzazione dei parametri
Una cosa interessante è il fatto di poter, passando da una action, parametrizzare sia la location che eventualmente altri parametri. Per esempio, dichiarando l’action redirect in questo modo:
<action name="redirect" class="it.nicola.esempi.form.Base" method="redirect" > <result type="redirect">${url}</result> </action> |
possiamo all’interno del metodo redirect della classe Base che implementa l’action valorizzare la variabile url. Una action così definità può essere richiamata in questo modo:
http://localhost:8180/esempio-struts2-redirect/redirect?url=http://www.google.it
Esempio
In questo esempio vengono implementati i tre casi di redirect descritti sopra:
- Una dichiarazione minima di redirect
- Un redirect ad una risorsa web con parametri
- Un redirect ad un url passato come parametro
Per il terzo esempio ho utilizzato una form in cui valorizzare l’url di destinazione.
Il file struts.xml
<struts> <constant name="struts.devMode" value="true" /> <constant name="struts.action.extension" value=","/> <package name="default" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" default="true" /> </result-types> </package> <package name="root" namespace="/" extends="default"> <default-action-ref name="index" /> <action name="index"> <result type="tiles" name="success">siteLayout</result> </action> <action name="input-redirect"> <result>tiles.input.redirect</result> </action> <action name="vai-al-blog"> <result type="redirect">http://www.nicolacolonna.it</result> </action> <action name="risorsa-web"> <result type="redirect"> <param name="location">risorsaweb.jsp</param> <param name="id">42</param> </result> </action> <action name="redirect" class="it.nicola.esempi.form.Base" method="redirect" > <result type="redirect">${url}</result> </action> </package> </struts> |
L’action che gestisce il redirect con url parametrico
public class Base extends ActionSupport { private static final long serialVersionUID = 1L; private String url; public String redirect() throws Exception { return SUCCESS; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } |
E finisce così, senza più niente da dire, questo post. Scarica l’esempio, è gratis.
Leave a Reply