Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Forward Action

Tecniche per creare link rispettando le regole del framework
Tecniche per creare link rispettando le regole del framework
Link copiato negli appunti

In genere non è una buona prassi quella di inserire, all'interno di una pagina JSP, dei link diretti ad altre pagine JSP, soprattutto per questioni di ordine e manutenzione: in effetti è all'interno del file di configurazione struts-config.xml, che fa parte del Controller, che dovremmo descrivere l'intero flusso dell'applicazione.

In alcune occasioni possiamo però avere la necessità di effettuare un forward da una pagina Jsp a un'altra, senza che in realtà ci sia bisogno di passare per una classe Action. Quello che si vuole è un plain link.

Nell'architettura MVC è compito del controller di elaborare tutte le richieste e selezionare la view per il client. Se si utilizza un link diretto, a un'altra pagina JSP, si stanno violando i confini dell'architettura "Model 2" (l'MVC per applicazioni Web).

Se permettessimo alla nostra applicazione di chiamare direttamente la pagina, il controller non sarebbe in grado di portare a termine i compiti per esso stabiliti nell'architettura MVC. Per risolvere questi problemi Struts mette a disposizione la ForwardAction che esegue semplicemente un forward verso un URI configurato nell'attributo parameter dell'action nello struts-config.

Quindi la ForwardAction ci evita la creazione di una classe Action che effettua solamente un semplice forward.

Prima di esaminare un esempio più consistente vediamo una configurazione tipica di ForwardAction:

<action input="/index.jsp" path="/provaForward"
        parameter="/pagina.jsp"
        type="org.apache.struts.actions.ForwardAction">
</action>

Quando viene selezionata l'action /provaForward, viene chiamato l'unico metodo della ForwardAction, che effettua un forward a pagina.jsp. La classe ForwardAction è molto utile quando è necessario integrare Struts con altri framework o più pagine Jsp.

Esempio

Abbiamo detto che ForwardAction agisce come bridge tra la vista corrente JSP e la pagina alla quale si collega. Utilizza il RequestDispatcher per effettuare un forward alla risorsa Web specificata. È ciò che permette di collegarsi a un'azione invece che direttamente a una pagina JSP.

Ecco alcuni passi necessari per implementare una ForwardAction:

  • utilizzare <html:link> con l'attributo action e aggiungere il link alla pagina JSP che punta all'azione
  • creare un action mapping nel file di configurazione di Struts che utilizza ForwardAction con l'attributo parameter che specifica il percorso alla JSP

Supponiamo di avere una pagina JSP, coded.jsp, che ha un link diretto su un'altra pagina JSP:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<body>
  <html:link page="/index.jsp">Home</html:link>
</body>
</html>

e di volerla convertire secondo la logica dell'architettura MVC/Model2. In questo caso modifichiamo il tag <html:link>su un'azione. È sufficiente produrre notcoded.jsp:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<body>
  <html:link action="home">Home</html:link>
</body>
</html>

Infine bisogna aggiungere un action mapping all'azione home referenziata dal tag html:link:

<action path="/home"
        type="org.apache.struts.actions.ForwardAction"
        parameter="/index.jsp">
</action>

Da una prospettiva di design, c'è un'ulteriore alternativa all'utilizzo dell'azione ForwardAction, anziché inserire un link a un azione o a una pagina, ci si potrebbe collegare a un global forward. Ecco un esempio di pagina JSP collegata a un global forward:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
  <body>
    <html:link forward="home">Home</html:link>
  </body>
</html>

Per permettere ora al codice di funzionare dobbiamo aggiungere un global forward al file di configurazione di Struts che mappi l'azione home:

<global-forwards>
  <forward name="home" path="/index.jsp" />
</global-forwards>

È possibile anche modificare il global forward in modo che punti a un action mapping:

<global-forwards>
  <forward name="home" path="/home.do" />
</global-forwards>

Questa, solitamente, è la pratica migliore, infatti, è più naturale collegarsi a forward che ad azioni.

Forward Attribute vs. ForwardAction

Struts permette le due dichiarazioni seguenti nel file struts-config.xml, ma la seconda è sicuramente più snella:

<!-- ForwardAction -->
<action path="/home"
        type="org.apache.struts.actions.ForwardAction"
        parameter="/index.jsp" />

<!-- Forward Attribute -->
<action path="/home" forward="/index.jsp" />

Ti consigliamo anche