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

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>