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

Custom ActionMappings in Struts

Vediamo come può essere estesa la classe ActionMapping per fornire informazioni di mapping specializzate all'ActionServlet
Vediamo come può essere estesa la classe ActionMapping per fornire informazioni di mapping specializzate all'ActionServlet
Link copiato negli appunti

Un oggetto ActionMapping descrive un'istanza di un'azione alla ActionServlet, rappresenta le informazioni che in modo univoco definiscono un'istanza di una classe azione. I valori definiti da un oggetto ActionMapping sono ciò che rendono univoca un azione particolare.

L'oggetto ActionMapping fornisce: informazioni utili al metodo Action.execute() e all'oggetto Action la possibilità di modificare il suo comportamento in base ai valori descritti in una particolare istanza ActionMappig.

ActionMapping personalizzata

La default ActionMapping definisce un numero di attributi e la combinazione di ciascuno di essi viene utilizzata per descrivere univocamente un'istanza di una Azione; solitamente questi attributi sono sufficienti, comunque ci sono delle situazioni in cui è necessario descrivere ulteriormente un'azione. Il Framework di Struts fornisce una soluzione a questo problema definendo proprietà specifiche ai bisogni della nostra applicazione.

È possibile definire queste proprietà supplementari semplicemente estendendo la classe ActionMapping e aggiungendo un numero n di sottoelementi <action> e di elementi <set-property> per ciascuna proprietà addizionale.

Creare un estensione di ActionMapping

Creiamo la nostra estensione di ActionMapping che utilizziamo per descrivere le azioni dell'applicazione. L'estensione di ActionMapping che creiamo permette di abilitare o disabilitare l'attività di logging utilizzando un singolo elemento <set-property>.

Per creare un estensione ActionMapping è necessario seguire i seguenti step:

  • Creare una classe che estende org.apache.struts.action.ActionMapping;
  • Definire proprietà addizionali che saranno utilizzate per descrivere gli oggetti Action;
  • Chiamare il metodo super(), che chiama il costruttore di default di ActionMapping;
  • Definire i metodi set e get per modificare e recuperare i valori della proprietà definita.

Listato 1. Creazione di un estensione ActionMapping

import org.apache.struts.action.ActionMapping;

// Step 1. Estensione dell' ActionMapping
public class ProvaActionMapping
    extends ActionMapping {
    
    // Step 2. Aggiunta delle nuove property
    protected boolean logResults = false;
    
    public ProvaActionMapping() {
    
        // Step 3. Chiamata del costruttore dell'ActionMapping
        super();
    }
    
    // Step 4. Aggiunta dei metodi setter/getter
    public void setLogResults(boolean logResults) {
        this.logResults = logResults;
    }
    
    public boolean getLogResults() {
        return logResults;
    }  
}

Utilizzo dell'estensione ProvaActionMapping

Ecco l'azione che nasce per utilizzare l'estensione appena definita:

Listato 2. Azione per utilizzare l'estensione (Guarda il codice completo)

..//
        ProvaActionMapping provaMapping = (ProvaActionMapping) mapping;
        
        Double price = null;
        String symbol = null;
        
        String target = new String("success");
        
        if (form!=null) {
            LookupForm2 lookupForm = (LookupForm2) form;
            
            symbol = lookupForm.getSymbol();
            price = new Double(1234.56);
        }
        
        if (price==null) {
            target = new String("failure");
        } else {
            if (provaMapping.getLogResults()) {
                System.err.println("SYMBOL: " + symbol + " PRICE: " + price);
            }
            request.setAttribute("PRICE", price);
        }
        
        return mapping.findForward(target);
..//

L'azione precedente si base su questo ActionForm:

Listato 3. ActionForm per l'azione precedente

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;

public class LookupForm2 extends ActionForm {

    private String symbol = null;
    
    public String getSymbol() {
        return symbol;
    }
    
    public void setSymbol(String symbol) {
        this.symbol = symbol;    
    }
    
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        this.symbol = null;
    }
}

Deploy dell'estensione ProvaActionMapping

Vediamo le modifiche che figurano nel file struts-config.xml:

Listato 4. Modifiche da apportare al file struts-config.xml

<form-bean type="fulvios.LookupForm2" name="lookupForm2" />

<action
  className="fulvios.FulviosActionMapping"
  path="/FulviosLookup"
  type="fulvios.LookupAction2"
  name="lookupForm2"
  input="/index.jsp">
    <set-property property="logResults" value="true" />
    <forward name="success" path="/quote2.jsp" />
    <forward name="failure" path="/index2.jsp" />
</action>

Questa è la index2.jsp:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<body>
    <html:form action="FulviosLookup">
    Symbol:<html:text property="symbol" />
    <html:submit/>
    </html:form>
</body>
</html>

e la solita quote2.jsp:

<%= request.getAttribute("PRICE") %>

Ti consigliamo anche