Struts2: il Redirect Action Result, qualche esempio
Che cosa è il Redirect Action Result
Il Redirect Action Result è uno dei result type predefiniti di struts2.
Questo tipo di result è quello da utilizzare quando da una action se ne vuole chiamare un’altra.
Chiamando questo tipo di result, l’action di destinazione viene cercata all’interno del namespace di partenza. Per questo motivo è possibile specificare, utilizzando un parametro, a quale namespace dovrà appartenere la destinazione.
Questa è una sua semplice definizione:
<action name="redirect-action" class="..." <result type="redirectAction"> <param name="actionName">pippo</param> </result> </action> |
In questo caso chiamando l’url
http://localhost:8080/esempio-struts2-redirect/redirect-action
si arriva diretti a questo:
http://localhost:8080/esempio-struts2-redirect/pippo
Con questa definizione invece:
<action name="redirect-action" class="..." <result type="redirectAction"> <param name="actionName">pippo</param> <param name="namespace">/topolinia</param> </result> </action> |
chiamando la stessa action si arriva qua:
http://localhost:8080/esempio-struts2-redirect/topolinia/pippo
Questo tipo di result ha i seguenti parametri:
- actionName: il nome dell’action a cui essere rediretti
- namespace: il namespace a cui appartiene l’action di destinazione. Se non viene specificato ci si riferisce al namespace corrente
- suppressEmptyParameters: elimina dall’url generato verso la nuova action i parametri che non sono valorizzati. E’ opzionale e di default a false
- parse: se impostata a false sul parametro actionName non sarà effettuato il parsing per le espressioni OGNL. E’ opzionale e di default a true
- anchor: specifica una eventuale ancora all’interno della destinazione. E’ opzionale
La parametrizzazione dei parametri
E’ possibile parametrizzare sia l’actionName, sia altri eventuali parametri che si vuole passare (via GET) alla action di destinazione utilizzando le espressioni OGNL:
<action name="redirect-action" class="it.nicola.esempi.form.Base" method="redirectAction" > <result type="redirectAction"> <param name="actionName">${url}</param> <param name="parametro">${parametro}</param> </result> </action> |
La classe Base si occuperà di valorizzare i parametri url e parametro.
Esempio
In questo esempio definisco la form redirect come sopra, e la chiamo da una form in cui è possibile scegliere il nome dell’action a cui poi si verrà rediretti. L’unica action a cui è possibile essere rediretti è pippo.
Quindi l’action
http://localhost:8080/esempio-struts2-redirect/redirect-action?url=pippo
si trasforma in
http://localhost:8080/esempio-struts2-redirect/pippo?parametro=42
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>siteLayout</result> </action> <action name="input-redirect-action"> <result>tiles.input.redirectaction</result> </action> <action name="redirect-action" class="it.nicola.esempi.form.Base" method="redirectAction" > <result type="redirectAction"> <param name="actionName">${url}</param> <param name="parametro">${parametro}</param> </result> </action> <action name="pippo" class="it.nicola.esempi.form.Pippo"> <result>tiles.pippo</result> </action> </package> </struts> |
L’implementazione dell’action
public class Base extends ActionSupport { private static final long serialVersionUID = 1L; private String url; private int parametro; public String redirect() throws Exception { return SUCCESS; } public String redirectAction() throws Exception { setParametro(42); return SUCCESS; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getParametro() { return parametro; } public void setParametro(int parametro) { this.parametro = parametro; } } |
Leave a Reply