39
1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Embed Size (px)

Citation preview

Page 1: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

1Corso Framework Struts - Grivet Chin Franco

Corso FrameworkStruts (1) 2Elaborazione di Franco Grivet Chin

Data 16/06/2009

Page 2: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

2Corso Framework Struts - Grivet Chin Franco

Framework

Framework (infrastruttura) è una struttura di supporto su cui un software può essere organizzato e progettato. Ha le seguenti caratteristiche

• E’ una piattaforma che velocizza la costruzione di applicazioni del dominio a cui si rivolge grazie al riuso della soluzione architetturale che ne costituisce la struttura

• Risparmiare allo sviluppatore la riscrittura di codice già steso in precedenza per compiti simili

•Si estendono le classi del framerwork e/o se ne implementano le interfacce; sono i componenti del framework che hanno la responsabilità di controllare il flusso elaborativo.

•sono le classi del framework che invocano il nostro codice applicativo e non viceversa come nel caso delle librerie di classi

•Utilizza i design pattern

Page 3: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

3Corso Framework Struts - Grivet Chin Franco

Framework VS Librerie

• Una libreria contiene funzioni o routine (metodi) che l’applicazione può invocare

• Framework fornisce componenti generici che collaborano tra loro che possono essere estesi (punti di estensione) per fornire nuove funzionalità

• Lo sviluppatore non scrive codice per coordinare le componenti.

• Losviluppatore deve determinare le componenti che aderendo alla logica

collaborativa del framework verranno coordinate da quest'ultimo

• Il framework assume il controllo della applicazione e non il contrario!

Page 4: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

4Corso Framework Struts - Grivet Chin Franco

Open source framework

• Sono stati tra i principali elementi di innovazione nelle architetture web

negli ultimi anni

• Hanno rappresentato il principale veicolo dell’esperienza “collettiva” degli sviluppatori in termini di design & architectural pattern, idioms,best practices

• Rispetto ai framework in-house (realizzati ad hoc) hanno una contribuzione di sviluppo più ampia e quindi una maggiore velocità di convergenza alla soluzione “migliore” per il dominio specifico

•Per uno sviluppatore/architetto la competenza su framework e librerie

Open Source è fondamentale

Page 5: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

5Corso Framework Struts - Grivet Chin Franco

Vantaggi di un framework

Disegno architetturaleUn framework è fondato su un disegno architetturale valido, in quanto il suo codice è scritto in base alle best-practices della tecnologia in uso.

Riduzione dei tempi di progettoLo sviluppatore deve implementare esclusivamente la logica applicativa potendo risparmiare le energie e il tempo necessari alla scrittura di componenti infrastrutturali.

Semplificazione dello sviluppoSemplifica lo sviluppo applicativo perché fornisce tutta una serie di componenti che risolvono la gran parte dei compiti comuni a tutte le applicazioni web J2EE (controllo del flusso, logging, gestione messaggi di errore, custom tags per la presentation logic, internazionalizzazione, validazione dei dati, etc..)

Page 6: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

6Corso Framework Struts - Grivet Chin Franco

Scelta del framework

Maturità del progettoSconsigliabile adottare un framework che sia in una fase iniziale di sviluppo e che sia poco adottato nella comunità degli sviluppatori e quindi poco testato sul campo in progetti reali.

DocumentazioneVerificare che la documentazione sia ricca e ben fatta. Questo facilita la risoluzione dei problemi che si incontrano nella realizzazione dell'applicazione e la comprensione del suo funzionamento.

Validità del disegno architetturale Verificare che sia disegnato correttamente e quindi che siano adottati i design-pattern e le best-practises della tecnologia di riferimento.

Adozione degli standardUn framework deve essere fondato sui componenti standard della tecnologia di riferimento. Evitare framework conuso di specifici tool di sviluppo o un modello troppo indirizzato ad uno specifico caso applicativo

EstensibilitàDeve essere possibile estenderne le funzionalità per adattarlo alle alle proprie esigenze.

Page 7: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

7Corso Framework Struts - Grivet Chin Franco

Web Application modello 2

E’ il modello utilizzato per lo sviluppo delle applicazioni Java/J2EE prima del’avvento dei framework. Si contrappone al modello 1 in cui si aveva solo servlet e Model o peggio JSP e model

Browser

Web / Servlet Container

JSP

Richiesta

Risposta

Servlet

dispatch

BusinessModel

Page 8: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

8Corso Framework Struts - Grivet Chin Franco

Web Application Framework

• un sistema software che fornisce struttura e comportamento generalizzati di task e workflow tipici delle applicazioni web. Es: gestione della navigazione (MVC), gestione

dell’accesso ai dati (DAO), …

• Nella “vita reale” per la realizzazione di web application è tipico

l’utilizzo congiunto di diversi framework open source specializzati in aspetti specifici

• Ci concentreremo su alcuni di quelli più diffusi che “lavorano” bene insieme

1.Struts (1) 2 (per la parte View e Controller)

2.Spring (per l’IOC – Inversion of Control)

3.Hibernate (per la parte di Model – ORM )

4.Jquery ( per la parte di front-end Web 2.0 , Ajax )

Page 9: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

9Corso Framework Struts - Grivet Chin Franco

Struts storia

STRUTS 1.x.x

Framework open source per lo sviluppo di applicazioni web su piattaforma J2EE.

Progetto inizialmente sviluppato come sotto-progetto di Apache Jakarta ma ora è divenuto un progetto a sé.

Struts estende le Java Servlet, aiutando all'utilizzo del pattern Model-View-Controller

Ideato da Craig McClanahan donato alla Apache Software Foundation nel maggio del 2000.

Page 10: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

10Corso Framework Struts - Grivet Chin Franco

STRUTS 1 e 2

Struts 1

• E’ un insieme di classi ed interfacce che costituiscono l'infrastruttura per costruire web application

•Java EE conformi al design pattern Model 2 (MVC)

• Il suo ideatore è Craig McClanahan ed è stato donato alla Apache Software Foundation nel maggio del 2000 da parte di IBM.

• E’ uno dei web application framework più diffusi al mondoStruts 2

• Nonostante il nome, Struts 2 non è solo una nuova release di Struts è un framework completamente nuovo basato su WebWork

• Sono state introdotte caratteristiche non presenti in Struts grazie ai feedback di migliaia di sviluppatori

• Struts e Struts 2 sono piuttosto diversi è importante conoscerli entrambi perchè il primo è ancora molto diffuso

Page 11: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

11Corso Framework Struts - Grivet Chin Franco

Struts1 class diagram

Page 12: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

12Corso Framework Struts - Grivet Chin Franco

Struts 1 sequence diagram

Page 13: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

13Corso Framework Struts - Grivet Chin Franco

Struts1 componenti principali

• Struts-config.xml fornisce alla ActionServlet, in base ai parametri della URL• La Action da invocare• La pagina JSP a cui inoltrare la richiesta• ActionServlet: il controller di Model 2• Action: il Model di Model 2 (Classe base per le classi “action” )• ActionForm: delle classi che contengono i dati inviati da un form

Le classi action sono responsabili di

• Interfacciarsi con il layer sottostante (es: EJB, DAO, …)

• Recuperare i dati da un ActionForm da presentare alla View e inserirli in un contesto (request, session, application)

Le pagine JSP sono responsabili di

• Recuperare i dati da visualizzare dal contesto

• Visualizzare i dati

Page 14: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

14Corso Framework Struts - Grivet Chin Franco

Esempio di Struts-config per struts 1

<struts-config>

<form-beans>

<form-bean name=”projectForm” type=”it.uniroma2.app.form.ProjectListForm”/>

</form-beans>

<action-mappings>

<action path=”/tasklist” type=”it.uniroma2.app.action.ProduceTaskListAction”

name=”projectForm” scope=”request” validate=”true” input=”/jsp/Project.jsp”>

<forward name=”success” path=”/jsp/TaskList.jsp”/>

<forward name=”failure” path=”/jsp/ServerErrors.jsp”/>

</action>

</action-mappings>

Page 15: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

15Corso Framework Struts - Grivet Chin Franco

Struts 2

La versione 2 di Struts risulta profondamente rinnovata rispetto alla precedente.

In realtà il progetto è nato con il nome di WebWork, che non ha nessun legame particolare con la versione 1 di Struts, per poi passare, dopo una prima fase di analisi e sviluppo, al nome Struts 2.

Per questo motivo la migrazione dalla versione 1 alla versione 2 non è semplice.

Utilizzando il nuovo framework è possibile scrivere software facilmente manutenibile, solido e aderente al pattern MVC.

La versione attualmente stabile è la 2.3.4. Il sito ufficiale del progetto è struts.apache.org, dal quale è possibile scaricare sia le librerie, che la documentazione.

Page 16: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

16Corso Framework Struts - Grivet Chin Franco

Struts 2-. Servlet Filter

• La Servlet API a partire dalla versione 2.3 mette a disposizione i Servlet

Filters.

• Possono essere utilizzati per moltissimi scopi, alcuni esempi: tracciatura e

Logging delle attività utente, localizzazione, compressione dati, autenticazione.

• Sono delle particolari classi Java che consentono di filtrare le richieste del

browser verso le Servlets di una web applications e la risposta della

Servlet al browser.

Page 17: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2-. Servlet Filter

• La “filtratura” avviene intercettando la richiesta HTTP in modo da poterla manipolare, prima che questa arrivi alla Servlet destinataria o modificando la risposta prima di essere ritornata al browser.

• Una classe per poter essere utilizzata come filtro deve implementare

l’interfaccia javax.servlet.Filter, che definisce tre metodi di base:

init(FilterConfig fc)

doFilter(ServletRequest req, ServletResponse res, FilterChain

chain)

destroy()

17Corso Framework Struts - Grivet Chin Franco

Page 18: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

18Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <filter>    <filter-name>struts</filter-name>    <filter-class>      org.apache.struts2.dispatcher.FilterDispatcher    </filter-class>  </filter>  <filter-mapping>    <filter-name>struts</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

Page 19: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

19Corso Framework Struts - Grivet Chin Franco

Struts 2 differenze con Struts 1

Vediamo in evidenza le differenze principali rispetto alla versione precedente.

web.xml • Struts: Il controllo viene affidato ad una Servlet. Di default alla ActionServlet

ma è possibile definire una Action personalizzata• Struts 2: Il controllo viene affidato ad un Filter. Di default al FilterDispatcher ma

è possibile definire un Filtro personalizzato

URI pattern • Struts: Di default viene utilizzato il pattern *.do per identificare una richiesta

che la ActionServlet prenderà in carico• Struts 2: Di default viene utilizzato il pattern *.action per identificare una

richiesta che il FiltroDispatcher prenderà in carico

File di configurazione • Struts: Di default il nome del file di configurazione è struts-config.xml che va

posizionato allo stesso livello del file web.xml• Struts 2: Di default il nome del file di configurazione è struts.xml che va

posizionato in una directory del classpath

Page 20: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

20Corso Framework Struts - Grivet Chin Franco

Struts 2 differenze con Struts 1

Mapping delle Action • Struts: Il mapping di una Action viene definito nel file di configurazione mediante

il tag action-mapping• Struts 2: Il mapping di una Action viene automaticamente generato dalla

concatenazione "package-nome della action", entrambi definiti nel file di configurazione

Proprietà di una Action • Struts: Le proprietà necessarie ad una Action vengono definite in una classe

ActionForm, nella quale occorre definire anche i metodi get e set• Struts 2: Le proprietà necessarie vengono definite direttamente nella Action

nella quale occorre definire anche i metodi get e set

Action • Struts: Una Action deve estendere la classe org.apache.struts.action.Action• Struts 2: Una Action deve implementare l'interfaccia

com.opensymphony.xwork2.Action oppure estendere la classe com.opensymphony.xwork2.ActionSupport che, a sua volta, è un'implementazione di Action

Page 21: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

21Corso Framework Struts - Grivet Chin Franco

Struts 2 differenze con Struts 1

Metodo execute

• Struts: Il metodo execute di una Action restituisce un ActionForward

• Struts 2: Il metodo execute di una Action restituisce una stringa. Il Controller stabilisce, in base alla stringa restituita, qual è la vista da richiamare

TagLibrary

• Struts: Sono disponibili diverse taglibrary, suddivise per tipo di argomento trattato (logic, bean, HTML)

• Struts 2: È disponibile un'unica taglibrary che mette a disposizione sia operazioni di logica che di rendering HTML

Page 22: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

22Corso Framework Struts - Grivet Chin Franco

Struts 2

Page 23: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

23Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

Prima di tutto aggiungiamo le seguenti librerie al nostro progetto, incluse nello zip completo scaricabile dal sito ufficiale del progetto:

commons-logging-1.0.4.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar

struts2-core-2.0.12.jar

xwork-2.0.6.jar

Page 24: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

24Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Struts 2 in pratica

Nel file web.xml, oltre alle usuali dichiarazioni, è necessario definire un filtro al quale vengono affidate tutte le richieste.

Questo filtro rappresenta il Controller dell'applicazione.

Naturalmente è necessario indicare anche l'URL al quale esso risponde.

Nel nostro esempio, utilizziamo la classe di default messa a disposizione dal framework, org.apache.struts2.dispatcher.FilterDispatcher

Nel nostro esempio il filtro viene invocato su tutte le URL (/*) che hanno come suffisso l'estensione .action (default). È possibile comunque configurare diversamente il filtro, indicando un pattern diverso da quello di default.

Page 25: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

25Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <filter>    <filter-name>struts</filter-name>    <filter-class>      org.apache.struts2.dispatcher.FilterDispatcher    </filter-class>  </filter>  <filter-mapping>    <filter-name>struts</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

Page 26: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

26Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

• Ogni richiesta intercettata dal Controller viene inoltrata ad una Action, una classe Java che implementa l'interfaccia com.opensymphony.xwork2.Action.

• L'unico metodo da dover implementare è execute(), che viene invocato automaticamente dal framerwork nel momento in cui il Controller inoltra la richiesta alla Action.

•È possibile anche estendere la classe com.opensymphony.xwork.ActionSupport, un'implementazione di Action, dalla quale è possibile ereditare un insieme di metodi e attributi di grande utilità nello sviluppo, quali gestione degli errori, dei messaggi e così via.

Page 27: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2

•Anche la versione 2 di Struts, così come il suo predecessore, prevede un file di configurazione: struts.xml

•. Il file deve essere posizionato nel classpath della webapp. Il posto più appropriato ove inserirlo è in /WEB-INF/classes/struts.xml.

•Tale file contiene la definizione di tutte le Action disponibili nel sistema. Ciascuna Action è identificata da un package, da un nome univoco e da uno o più destinazioni (result).

•Il result verrà utilizzato dal Controller per decidere qual è la vista appropriata da richiamare.

27Corso Framework Struts - Grivet Chin Franco

Page 28: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

28Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.devMode" value="true" />

<package name="default" namespace="/" extends="struts-default">

<action name="Menu"> <! -- appartiene al package di default -- >

<result>/menu/Menu.jsp</result>

</action>

</package>

<! -- xm diviso in più parti -- >

<include file="manning/chapterTwo/chapterTwo.xml"/>

</struts>

Page 29: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

29Corso Framework Struts - Grivet Chin Franco

Struts 2 in pratica

• Constant serve per impostare prorietà del framework

Il valore devMode=“true” abilita automaticamente un livello di informazioni di debugging e anche il ricaricamento delle varie risorse a ogni request

•Il processo di mapping è semplice:

•http:// + server:porta + /contesto + / package namespace + / azione.action

http://localhost:8080/Struts2InAction/chapterTwo/HelloWorld.action

• i package dividono le action in zone logiche e gli associano un path

Page 30: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Ruolo delle azioni

• Racchiudere la logica di businesspublic String execute() {

setCustomGreeting( GREETING + getName() );

return "SUCCESS";

}

• Permettere il data transferprivate String name;

public String getName() {return name;}

public void setName(String name) {this.name = name;}

• Restituire una stringa per il routing del result (view)<action name="HelloWorld" class="manning.chapterOne.HelloWorld">

<result name="SUCCESS">/chapterTwo/HelloWorld.jsp</result>

<result name="ERROR">/chapterTwo/Error.jsp</result>

</action>

30Corso Framework Struts - Grivet Chin Franco

Page 31: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Packages

I package di Struts 2 sono simili concettuamente ai package di Java.

Forniscono un meccanismo per raggruppare le azioni in base a funzionalità comuni o a dominio.

NOTA: E’ possibile avere lo stesso namespace in più di un package

In tale caso le azione dei due package mappano lo stesso namespace.

31Corso Framework Struts - Grivet Chin Franco

Page 32: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Packages

Namespace di default: è quello che ha come namespace “”; se un’action viene chiamata su un namespace e non viene trovata , viene ancora cercata nel namespace di default

Namespace di root: è quello che ha come namespace “/”; viene trattato come tutti gi altri namespace

extends: è fondamentale per fare in modo che un package “erediti” la logica (interceptor, etc.) ad esempio del package già presente che si chiama “struts-default” che dichiara moltissimi componenti standard (si trova nel struts2-core.jar) ad esempio l’interceptor che si ocupa del popolamento dei parametri della action

32Corso Framework Struts - Grivet Chin Franco

Page 33: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Action

Le Action normalmente implementano l'interfaccia com.opensymphony.xwork2.Action oppure estendono la classe com.opensymphony.xwork2.ActionSupport che, a sua volta, è un'implementazione di Action

Nota: potrebbe essere sufficiente avere una classe normale che espone un metodo execute conforme

La Action Interface fornisce anche costanti:public static final String ERROR "error"

public static final String INPUT "input"

public static final String LOGIN "login"

public static final String NONE "none"

public static final String SUCCESS "success"

33Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 34: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Action

Ad esempio la pass-through action:

<action name="Name">

<result>/chapterOne/NameCollector.jsp</result>

</action>

Non specifica la classe ; Struts2 fonisce ua action di default anche se non lo specifichiamo con un metodo execute vuoto che restituisce SUCCESS che è anche il default dell’attributo name de tag result (convention over configuration)

34Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 35: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Validazione di base

La classe ActionSupport fornisce una validazione di base, poichè implementa Validateable che lavora con il DefaultWorkflowInterceptor

Quando il workflow interceptor scatta, cerca un metodo validate() sulla action da

invocare.

public class Register extends ActionSupport {

….

public void validate(){

PortfolioService ps = getPortfolioService();

if ( getPassword().length() == 0 ){

addFieldError( "password", "Password is required.") );

}…..}

Dopo l’esecuzione del validate il controllo ritorna al workflow interceptor che veirifica se ci sono messagi di errore (il metodo è void); se sì termina l’esecuzione della action e torna all’input form

35Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 36: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Validazione di base

L’interfaccia ValidationAware fornisce I metodi per memorizzare e recuperare I messaggi. L’iterfaccia è implementata da ActionSupport

addFieldError ( String fieldName, String errorMessage )

addActionError ( String errorMessage )

Nel stut.xm si defiisce la view a cui si deve ritornare , ovvero il result con name “input”

<action name="Register" class="manning.chapterThree.Register">

<result>/chapterThree/RegistrationSuccess.jsp</result>

<result name="input">/chapterThree/Registration.jsp</result>

</action>

36Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 37: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Validazione di base

E’ possibile utilizzare un file di properties per recuperare i messaggi di errore

public void validate(){

PortfolioService ps = getPortfolioService();

if ( getPassword().length() == 0 ){

addFieldError( "password", getText("password.required") );

}

37Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 38: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

Struts 2 in pratica

Object-backed JavaBeans properties

public String execute(){

getPortfolioService().createAccount( user );

return SUCCESS;

}

private User user;

public User getUser() {

return user;

}

Nel Form

<s:textfield name="user.username" label="Username"/>

38Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 39: 1 Corso Framework Struts - Grivet Chin Franco Corso Framework Struts (1) 2 Elaborazione di Franco Grivet Chin Data 16/06/2009

39Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

www.altran.it