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

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>