XeDotNet meeting del 5 Marzo 2013
In questa sessione vedremo come Knockout.js permetta di scrivere codice JavaScript in modo pulito e organizzato, semplificando la scrittura del codice e la sua manutenzione. Come lo si utilizza KO? Quali vantaggi ci offre? Quali librerie ci vengono in aiuto? Quali sarebbe meglio evitare?
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
油
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei pi湛 diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilit ed estendibilit.
In questa sessione vedremo le novit principali di Asp.Net MVC in versione 3.
La sessione 竪 stata tenuta a SMAU Business Bologna il 9 giugno 2011
Model View Controller - Semplificare Il Codice E Minimizzare I TempiMarco Parenzan
油
Laumento della complessit delle applicazioni e la velocit di realizzazione richiesta al giorno doggi, hanno obbligato gli sviluppatori ad utilizzare metodologie formali per la scrittura di codice e il successivo testing dello stesso al fine di minimizzare i tempi di rilascio.
Lutilizzo dei pattern, ossia di convenzioni condivise dalla community dei programmatori, 竪 una pratica sempre pi湛 diffusa e adottata anche per applicazioni Web.
Lormai trentennale pattern Model-View-Controller (MVC) sta attualmente conoscendo una nuova giovinezza grazie al successo di framework nelle applicazioni Web che lo usano come riferimento.
Rails 竪 il framework MVC pi湛 famoso e diffuso, implementato per la piattaforma Ruby, mentre ASP.NET MVC e MonoRail sono i due framework web MVC che stanno riscuotendo il maggiore successo per lo sviluppo su .NET e su Windows.
Conosceremo quindi la filosofia di riferimento e le specificit dei due framework tramite due implementazioni reali di una stessa applicazione e ne discuteremo vantaggi e svantaggi.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
油
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
油
Selenium framework: Selenium 竪 un framework open-source per l'automazione e il testing di applicazioni web che permette di controllare in remoto le istanze del browser ed emulare l'interazione di un utente.
Blazor 竪 un framework per la creazione di Single Page Application (SPA) tramite lutilizzo di C#.
Creato da Steve Sanderson e successivamente inserito in .NET Core come esperimento.
Visto lenorme successo avuto sulla community 竪 stato poi deciso di renderlo parte integrante dellecosistema .NET
Offre tutti i vantaggi di un framework front-end scrivendo codice interamente in C#.
A prima vista, MVC is all about the presentation layer. In realt, per trarre il massimo giovamento da questo toolkit 竪 necessario progettare lintera soluzione utilizzando criteri ad hoc.
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
油
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei pi湛 diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilit ed estendibilit.
In questa sessione vedremo le novit principali di Asp.Net MVC in versione 3.
La sessione 竪 stata tenuta a SMAU Business Bologna il 9 giugno 2011
Model View Controller - Semplificare Il Codice E Minimizzare I TempiMarco Parenzan
油
Laumento della complessit delle applicazioni e la velocit di realizzazione richiesta al giorno doggi, hanno obbligato gli sviluppatori ad utilizzare metodologie formali per la scrittura di codice e il successivo testing dello stesso al fine di minimizzare i tempi di rilascio.
Lutilizzo dei pattern, ossia di convenzioni condivise dalla community dei programmatori, 竪 una pratica sempre pi湛 diffusa e adottata anche per applicazioni Web.
Lormai trentennale pattern Model-View-Controller (MVC) sta attualmente conoscendo una nuova giovinezza grazie al successo di framework nelle applicazioni Web che lo usano come riferimento.
Rails 竪 il framework MVC pi湛 famoso e diffuso, implementato per la piattaforma Ruby, mentre ASP.NET MVC e MonoRail sono i due framework web MVC che stanno riscuotendo il maggiore successo per lo sviluppo su .NET e su Windows.
Conosceremo quindi la filosofia di riferimento e le specificit dei due framework tramite due implementazioni reali di una stessa applicazione e ne discuteremo vantaggi e svantaggi.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
油
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
油
Selenium framework: Selenium 竪 un framework open-source per l'automazione e il testing di applicazioni web che permette di controllare in remoto le istanze del browser ed emulare l'interazione di un utente.
Blazor 竪 un framework per la creazione di Single Page Application (SPA) tramite lutilizzo di C#.
Creato da Steve Sanderson e successivamente inserito in .NET Core come esperimento.
Visto lenorme successo avuto sulla community 竪 stato poi deciso di renderlo parte integrante dellecosistema .NET
Offre tutti i vantaggi di un framework front-end scrivendo codice interamente in C#.
A prima vista, MVC is all about the presentation layer. In realt, per trarre il massimo giovamento da questo toolkit 竪 necessario progettare lintera soluzione utilizzando criteri ad hoc.
Asp.NET MVC 竪 un nuovo framework per lo sviluppo di applicazioni web alternativo al modello webform. Questo consente di utilizzare il pattern MVC per lo sviluppo di applicazioni Asp.NET, permettendo quindi una miglior separazione delle responsabilit che a sua volta porta ad una maggior manutenibilit, riusabilit e facilit nel testing.
La sessione illustrer i motivi che hanno portato alla nascita di Asp.NET MVC e le sue caratteristiche fondamentali.
Agenda:
- Storia dei framework MS per lo sviluppo web
- Introduzione a Asp.NET MVC
- Vantaggi di Asp.NET MVC
- Il pattern MVC
- Hello MVC: DEMO
- Componenti di MVC: Routing, Controller, Model, View
Alessandro Forte e Michele Aponte, co-fondatori di DotNetCampania, intervengono sul confronto tra i due pattern MVP e MVC per lo sviluppo di applicazioni Web.
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
油
This presentation talks about model view controller, model view presenter and model view viewmodel patterns. These are architectural design patterns for implementing user interfaces. They divide a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user. Also, they promote separation of concerns. As examples, some frameworks are reported, such as:
- Spring MVC
- BackboneJS
- AngularJS
The presentation is took from the Software Engineering course I run in the bachelor-level informatics curriculum at the University of Padova.
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system Tarin Gamberini
油
The document discusses mutation testing and the PIT mutation testing system. It begins by explaining the concepts of mutation testing, how PIT works, and the different mutators that PIT uses to generate mutants. It then provides examples of using PIT on a sample Ticket class to generate mutants and how the test results can help improve test coverage and discover weak tests.
MUTANTS KILLER - PIT: state of the art of mutation testing system Tarin Gamberini
油
The document discusses mutation testing and the PIT mutation testing system. It begins with an overview of mutation testing, which involves making small changes to a program to generate mutant versions and running tests against these mutants to evaluate test effectiveness. The document then covers key concepts of PIT including the various mutators it uses to generate mutants and how it leverages test coverage to efficiently run tests against mutants. An example using a sample Ticket class demonstrates how PIT reports can identify weaknesses in tests by showing mutants that were killed or lived. The document promotes using mutation testing and PIT to evaluate test quality and improve test effectiveness at finding faults.
An extremely little set of rules to write good commit messages.
History (how code changes over time) become a very useful tool if associated with good commit messages.
These slides would make developers more aware about how good commit messages could improve their work.
Apache Maven 竪 un software per la gestione di progetti. Basato sul concetto di project object model (POM), un punto centralizzato di informazione, Maven pu嘆 gestire la build, i report la documentazione, e molto altro.
LOG4j allows the developer to control which log statements are output with arbitrary granularity. It is fully configurable at runtime using external configuration files.
1. MVC Struts 1
A Web Application Framework
a cura di
Tarin Gamberini
2. Sommario Parte 1 di 2
1. MVC
1. JSP, JSP Model 1, JSP Model 2
2. Model-View-Controller (MVC) Pattern
3. Distributed Multitiered Applications
4. Dove si inserisce Struts?
www.taringamberini.com MVC Struts 1 2
3. Sommario Parte 2 di 2
1. Struts 1
1. Installazione e configurazione
2. Controller: Action, ActionForward
3. Model
4. View: ActionForm
5. Struts Custom Tag Library
www.taringamberini.com MVC Struts 1 3
4. MVC
MVC Struts 1
A Web Application Framework
Parte 1 di 2
5. JavaServer Pages (JSP)
Una JSP 竪 unastrazione (vista ad alto livello) di
una servlet
Il Web Container, a fronte di una Request di una
JSP:
traduce il .jsp in un .java (servlet)
compila il .java (servlet) in un .class
Ogni JSP ha molte responsabilit:
view logic, flow logic, data access logic,
business logic, security logic, ...
www.taringamberini.com MVC Struts 1 5
6. JavaServer Pages (JSP)
Parte di logica pu嘆 essere incapsulata in tag:
Disaccoppiamento fra presentazione (View) e
contenuto (Model)
Una pagina con tag 竪 compresa meglio dai web
designer
Parte di logica rimane nella JSP sotto forma di:
scriptlet <% String firstDate =
request.getParameter(firstDate); %>
JavaScript per pagine pi湛 dinamiche e performanti
<script type=text/javascript validate(firstDate)
www.taringamberini.com MVC Struts 1 6
8. JSP Model 1
Request e Response sono a carico della JSP
JSP accede alla base dati attraverso JavaBeans:
disaccoppiamento nellaccesso ai dati. Benefici:
La JSP pu嘆 cambiare (layout) senza obbligare al
cambiamento il JavaBean
Il JavaBean pu嘆 cambiare (alter table) senza obbligare al
cambiamento la JSP
Architettura adatta per semplici applicazioni:
business logic, data access logic, I18n logic, security
logic, ... sono semplici o del tutto assenti
www.taringamberini.com MVC Struts 1 8
10. JSP Model 2
Request a carico della servlet (Controller),
Response a carico della JSP (View)
Servlet (Controller) ha le responsabilit pi湛
pesanti:
I18n logic, security logic, ...
business logic, persistence logic: istanzia Bean ed
oggetti che user la JSP
flow logic: in base alle azioni dellutente determina il
forward alla JSP successiva
JSP (View) ha la responsabilit della
view logic: accede ai Bean istanziati dalla servlet
www.taringamberini.com MVC Struts 1 10
12. MVC Pattern - Scenario
Applicazioni Enterprise supportano pi湛 utenti
che utilizzano diverse View, per esempio:
HTML per B2C
WML per B2C
JFC/Swing per amministratori (magazziniere)
XML per B2B
Evitare duplicazione codice View dipendente
(copia/incolla)
Elevati costi di manutenzione
Evoluzione in differenti applicativi, uno per ogni
View, con stesse funzionalit
www.taringamberini.com MVC Struts 1 12
13. MVC Pattern - Obiettivi
Accedere agli stessi dati da presentare in
differenti View: HTML, WML, JFC/Swing, XML
Aggiornare gli stessi dati attraverso interazioni
differenti:
Click sui link di pagina HTML o su WML card
Click sui bottoni di una GUI JFC/Swing
Invio messaggi fra web services SOAP (XML)
Supporto alle diverse View ed ai diversi tipi di
Interazioni utente non deve impattare le core
functionality della enterprise application
www.taringamberini.com MVC Struts 1 13
14. MVC Pattern - Soluzione
Model-View-Controller (MVC) Pattern garantisce
semplificazione delle fasi di sviluppo, test,
manutenzione, attraverso il disaccoppiamento tra core
functionality (M), logica di presentazione (V), logica di
interazione (C)
www.taringamberini.com MVC Struts 1 14
15. MVC Pattern - Model
Il Model 竪 un modello software di
processi che avvengono nel mondo reale
Il Model descrive:
Enterprise data
Regole di accesso/aggiornamento dei dati
Regole di elaborazione dei dati specifiche del
processo modellato (business logic)
www.taringamberini.com MVC Struts 1 15
16. MVC Pattern - View
La View accede ai dati, attraverso il
Model, e li presenta
La View mantiene consistenza fra il dato
presentato ed il dato contenuto nel
Model:
Modalit push (passiva): la View riceve il
dato corrente dal Model
Modalit pull (attiva): la View chiede al
Model il dato corrente (Web application)
www.taringamberini.com MVC Struts 1 16
17. MVC Pattern - Controller
Il Controller traduce le interazioni fra utente e
View in azioni
EventListener per JFC/Swing View
HttpRequest get e post per Web View
Il Controller delega lesecuzione delle azioni al
Model
Il Controller sceglie la successiva View in
funzione del risultato dellesecuzione delle
azioni da parte del Model
www.taringamberini.com MVC Struts 1 17
18. Distributed Multitiered Applications
La piattaforma JEE concepisce una
applicazione enterprise secondo un modello
multistrato distribuito
Le funzionalit realizzate dalla logica
applicativa sono divise in componenti installati
in differenti strati e differenti macchine
Client-tier: esegue sulla macchina client
Web-tier: esegue sul JEE server
Business-tier: esegue sul JEE server
EIS-tier (Enterprise Information System): esegue
sul DB server
www.taringamberini.com MVC Struts 1 18
20. Componenti Java EE
Un componente offre una funzionalit
incapsulata in una unit software
Applet e Applicazioni Client: componenti che
eseguono sul client
Java Servlet, JSP, JSF: tecnologie di componenti
web che eseguono sul server
EJB: componenti business che eseguono sul server
Un componente 竪 eseguito su una macchina
allinterno di un Container
www.taringamberini.com MVC Struts 1 20
21. Java EE Containers
I Containers sono un'interfaccia fra i componenti
e le funzionalit, di basso livello, che risiedono
nella piattaforma che supporta tali componenti
EJB Container: componenti (EJB) e container
eseguono sul JEE server
Web Container: componenti (Servlet, JSP) e container
eseguono sul JEE server
Application Container: componenti (applicazioni) e
container eseguono sul client
Applet Container: componenti (Applet) e container
(web browser e Java Plug-in) eseguono sul client
www.taringamberini.com MVC Struts 1 21
22. Java EE Containers
Un componente viene deployato nel relativo
Container
www.taringamberini.com MVC Struts 1 22
23. Dove si inserisce Struts?
Struts rappresenta una implementazione del pattern MVC
Struts offre uninfrastruttura su cui costruire una applicazione
enterprise Multi-Tier
www.taringamberini.com MVC Struts 1 23
24. Struts 1
MVC Struts 1
A Web Application Framework
Parte 2 di 2
27. Struts Controller (MVC)
Il Controller (RequestProcessor) traduce le interazioni fra utente e
View in azioni dichiarativamente nello struts-config.xml
<struts-config>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 27
28. Struts Controller (MVC)
Il Controller delega lesecuzione delle azioni al Model tramite una
classe de gestione dell'azione
<struts-config>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 28
29. Struts Controller (MVC)
Il Controller sceglie la successiva View in funzione del risultato
dellesecuzione delle azioni da parte del Model
<struts-config>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 29
30. Struts init()
Il Web Container inizializza Struts invocando il metodo
init() della ActionServlet:
1. Lettura delle risorse di messaggi interne di Struts
2. Lettura dal web.xml dei parametri di configurazione di Struts
3. Init. della configurazione:
Parsing dello struts.config.xml (dtd)
Creazione dell'oggetto ApplicationConfig
Salvataggio dell'ApplicationConfig nel ServletContext
4. Init. delle risorse di messaggi
Lettura dei vari message-resources.properties
Salvataggio dei messaggi nel ServletContext
Init. DataSource
Init. Plug-in
www.taringamberini.com MVC Struts 1 30
31. La classe Action
Un Action 竪 il ponte (Adapter) fra il contenuto
di una richiesta HTTP e la logica di business
Estendendo Action si possono progettare
Action personalizzate che delegano
l'elaborazione della richiesta HTTP
all'appropriata logica di business
Il controller di Struts (RequestProcessor)
invoca il metodo execute(...) dell'Action
www.taringamberini.com MVC Struts 1 31
32. La classe Action
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request, HttpServletResponse
response) throws Exception {
// 1. ottiene i parametri dal form
// 2. delega alla logica di business
// 3. determina view successiva
if (...) { return mapping.findForward("success"); }
else { return mapping.findForward("failure"); }
}
}
www.taringamberini.com MVC Struts 1 32
33. Ciclo di vita di una Action
RequestProcessor contiene una HashMap:
Key: nome delle Action nello struts-config.xml
Value: riferimento all'istanza della relativa Action
2. Struts, a fronte di una richiesta di un'Action,
controlla l'HashMap:
Se l'Action non 竪 ancora istanziata (Value==null) la
istanzia, salvandone il riferimento nell'HashMap
Se l'Action era gi stata istanziata ne ottiene il
riferimento
Action condivise fra pi湛 thread: thread-safe se
progettate senza variabili di istanza
www.taringamberini.com MVC Struts 1 33
34. La classe ActionForward
La classe ActionForward rappresenta una
destinazione alla quale il controller
inoltra il risultato dell'elaborazione della
richiesta HTTP da parte del Business
Una ActionForward pu嘆 essere:
creato nell'Action
ottenuto dal mapping dichiarato nello struts-
config invocando mapping.findForward(...)
www.taringamberini.com MVC Struts 1 34
35. La classe ActionForward
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request, HttpServletResponse
response) throws Exception {
// 1. ottiene i parametri dal form
// 2. delega alla logica di business
// 3. determina view successiva
if ( ... ) { return mapping.findForward("success"); }
else { return mapping.findForward("failure"); }
}
}
www.taringamberini.com MVC Struts 1 35
36. Struts Model (MVC)
Struts non offre granch辿 per progettare il
Model
Ricorso ad infrastrutture esterne a Struts:
EJB
Progetto di infrastrutture ad-hoc basate su:
JavaBeans (BO, DAO, DTO)
Pattern vari
Object-to-Relational Mapping (iBatis, Hybernate)
www.taringamberini.com MVC Struts 1 36
37. Struts View (MVC)
La View accede ai dati, attraverso il
Model, e li presenta
La presentazione sfrutta un'interfaccia
utente visualizzata dal client all'interno di
un web browser:
HTML, CSS
JSP con JSTL, con Struts custom tag
Resource bundle Java
www.taringamberini.com MVC Struts 1 37
38. Struts View (MVC)
La View mantiene consistenza fra il dato
presentato ed il dato contenuto nel
Model:
Modalit pull (attiva): la View chiede al
Model il dato corrente (il client 竪 un browser
web che inoltra richieste HTTP)
JSP con JSTL, con Struts custom tag
ActionForm di Struts
DTO
www.taringamberini.com MVC Struts 1 38
39. La classe ActionForm
ActionForm 竪 impiegata per catturare i dati in
ingresso da un form HTML e trasferirli alla
classe Action
ActionForm si interpone fra la View ed il
Controller
ActionForm agisce da buffer per i dati del form
HTML mentre sono validati
ActionForm sono JavaBeans: dati del form
HTML memorizzati come properties
www.taringamberini.com MVC Struts 1 39
40. La classe ActionForm
Gli ActionForm sono dichiarati nel file struts-config.xml nella
sezione form-beans:
<struts-config>
<form-beans>
<form-bean name="loginForm" type="login.LoginForm" />
<form-bean ...
</form-beans>
...
</struts-config>
www.taringamberini.com MVC Struts 1 40
41. La classe ActionForm
Gli ActionForm sono associate alle Action attraverso il nome simbolico del form:
<struts-config>
<form-beans>
<form-bean name="loginForm" type="login.LoginForm" />
</form-beans>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 41
42. La classe ActionForm
Gli ActionForm possono essere messi in request od in session (default):
<struts-config>
<form-beans>
<form-bean name="loginForm" type="login.LoginForm" />
</form-beans>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 42
43. La classe ActionForm
Se fallisce la validazione dell'ActionForm si esegue forward all'input :
<struts-config>
<form-beans>
<form-bean name="loginForm" type="login.LoginForm" />
</form-beans>
<action-mappings>
<action
path="/login" type="login.LoginAction"
name="loginForm" scope="request" input="/login.jsp">
<forward name="success" path="/logged.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
</struts-config>
www.taringamberini.com MVC Struts 1 43
44. Ciclo di vita di una ActionForm
1. Il controller riceve una richiesta HTTP
2. Crea o riusa ActionForm
3. Inizializza propriet dell' ActionForm: reset()
4. Salva ActionForm nello scope dichiarato
5. Popola ActionForm prendendo i dati dalla richiesta
HTTP
6. Valida propriet dell'ActionForm: validate()
se errore si esegue forward all'input
2. altrimenti invoca il metodo execute() dell'Action
3. Forward alla view successiva con ActionForm nello scope
dichiarato
www.taringamberini.com MVC Struts 1 44
45. Inviare messaggi alla View
ActionForm e Action permettono di salvare
nella richiesta HTTP eventuali messaggi prima
dell'inoltro alla View successiva
ActionMessages rappresentano messaggi
informativi
ActionErrors (竪 un ActionMessages)
rappresentano messaggi d'errore
ActionMessages ed ActionErrors sono formati
da insiemi di pi湛 ActionMessage
www.taringamberini.com MVC Struts 1 45
46. Messaggi da un ActionForm
La validazione delle propriet di un ActionForm salva automaticamente nella
richiesta Http gli ActionErrors impiegati per rappresentare insiemi di messaggi di
errori di validazione
public class LoginForm extends ActionForm {
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors actionErrors = new ActionErrors();
// se password troppo corta prepara un messaggio d'errore
ActionMessage actionMessage = new ActionMessage(
"login.form.validating.error.password.minLenght",
getPasswordMinLenght());
actionErrors.add("password", actionMessage);
return actionErrors;
}
}
www.taringamberini.com MVC Struts 1 46
47. Messaggi da un Action
Un Action pu嘆 salvare nella richiesta HTTP sia ActionErrors, con
saveErrors(), che ActionMessages con saveMessages()
public class LoginAction extends Action {
public ActionForward execute(...) {
...
ActionMessage actionMessage = new ActionMessage("login.success", user);
ActionMessages actionMessages = new ActionMessages();
actionMessages.add(ActionMessages.GLOBAL_MESSAGE, actionMessage);
saveMessages(request.getSession(), actionMessages);
return mapping.findForward("success");
}
}
www.taringamberini.com MVC Struts 1 47
48. Struts Custom Tag Library - HTML
Utilizzata per interagire con tag HTML: input form,
checkbox, image, link, submit, text, textarea, ecc...
Dichiarazione nel web.xml (optional dalla 2.4):
<taglib>
<taglib-uri> http://struts.apache.org/tags-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
Dichiarazione in una JSP:
<%@ taglib uri="http://struts.apache.org/tags-html"
prefix="html" %>
www.taringamberini.com MVC Struts 1 48
49. Struts Custom Tag Library - HTML
Esempio di una JSP da cui effettuare il login:
<html:form action="/login.do">
<p><bean:message key="login.form.userName" />
<html:text property="userName" /></p>
<p><bean:message key="login.form.password" />
<html:password property="password" /></p>
<p><html:checkbox property="forgotPassword" />
<bean:message key="login.form.forgotPassword" /></p>
<html:submit />
</html:form>
www.taringamberini.com MVC Struts 1 49
50. Struts Custom Tag Library - Bean
Utilizzata per interagire con JavaBeans e resource
bundle: write, message, ecc...
Dichiarazione nel web.xml (optional dalla 2.4):
<taglib>
<taglib-uri>http://struts.apache.org/tags-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
Dichiarazione in una JSP:
<%@ taglib uri="http://struts.apache.org/tags-bean"
prefix="bean" %>
www.taringamberini.com MVC Struts 1 50
51. Struts Custom Tag Library - Bean
Esempio di una JSP dopo il login:
<p><bean:write name= loginForm
property=userName />
<bean:message key="logged.success" /></p>
Ove possibile preferire a <bean:write> il
<c:out> della JSTL:
<p><c:out value="loginForm.userName"/>
<bean:message key="logged.success" /></p>
www.taringamberini.com MVC Struts 1 51
52. Struts Custom Tag Library - Logic
Utilizzata per inserimento di HTML dinamico in modo
condizionale o iterativo: equal, notEqual, greaterThan,
lessEqual, iterate, ecc...
Dichiarazione nel web.xml (optional dalla 2.4):
<taglib>
<taglib-uri>http://struts.apache.org/tags-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
Dichiarazione in una JSP:
<%@ taglib uri="http://struts.apache.org/tags-logic"
prefix="logic" %>
www.taringamberini.com MVC Struts 1 52
53. Struts Custom Tag Library - Logic
Inserimento condizionale:
<logic:equal name="profiloUtenteForm" property="lettura"
value="true">
<p><bean:message key="login.form.userName" />
<html:text property="userName" disabled="true" /></p>
</logic:equal>
Ove possibile preferire a <logic:equal> il <c:if> della
JSTL:
<c:if test="${profiloUtenteForm.lettura eq 'true'}">
<p><bean:message key="login.form.userName" />
<html:text property="userName" disabled="true" /></p>
</c:if>
www.taringamberini.com MVC Struts 1 53
54. Struts Custom Tag Library - Logic
Inserimento iterativo:
<logic:iterate id="utente" name="listaUtentiForm" property="listaUtenti"
indexId="index">
<tr>
<td><bean:write name="index" /></td>
<td><bean:write name="utente" property="userName" /></td></tr>
</logic:iterate>
Ove possibile preferire a <logic:equal> il <c:if> della JSTL:
<c:forEach var="utente" items="${listaUtentiForm.listaUtenti}"
varStatus="loopTagStatus">
<tr>
<td>${loopTagStatus.index + 1 }</td>
<td>${utente.userName}</td></tr>
</c:forEach>
www.taringamberini.com MVC Struts 1 54
55. I18N
Resource bundle conformi alle convenzioni
della classe java.util.PropertyResourceBundle:
File di testo con estensione .properties
Ogni riga contiene una coppia key=value
Es. di un MessageResources_it.properties:
login.form.userName=Utente
login.form.password=Password
login.success=L'utente {0} si 竪 loggato con successo.
Ultimo accesso il {1} alle ore {2}.
www.taringamberini.com MVC Struts 1 55
56. Bibliografia
JavaServer Pages Model 2 architecture:
http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-
jspmvc.html
Java BluePrints Enterprise Patterns:
http://java.sun.com/blueprints/patterns/MVC.html
The Java EE 5 Tutorial:
http://java.sun.com/javaee/5/docs/tutorial/doc/p1.html
Struts 1 User Guide:
http://struts.apache.org/1.3.9/userGuide/index.html
Programmare con Jakarta Struts Chuck Cavaness Ulrico
Hoepli Editore 2003
Jakarta-Struts Live Richard Hightower SourceBeat, LLC,
Higland Ranch, Colorado - 2004
www.taringamberini.com MVC Struts 1 56