L'applicazione che presenteremo in questo articolo sarà volutamente dotata di poche e chiare funzionalità in modo che ci si possa soffermare sugli aspetti tecnologici ed implementativi. Presenteremo una maschera nella quale l'utente dovrà inserire il suo nome e cognome, con il successivo messaggio di benvenuto.
Nella nostra applicazione è necessaria una sola Action che chiameremo HtmlAction. L'Action validerà i dati inseriti dall'utente (nome e cognome) e lo redirigerà alla pagina di benvenuto, qualora i dati sono validi, oppure alla pagina di errore, qualora i dati non siano validi.
Il file di configurazione (struts.xml), per la nostra applicazione è il seguente:
Listato 1. File di configurazione struts.xml
<struts>
<package name="html" extends="struts-default" namespace="/">
<action name="HtmlAction" class="it.html.action.HtmlAction">
<result name="input">/index.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
Abbiamo definito due pagine JSP:
- index.jsp che contiene la maschera di inserimento;
- welcome.jsp che contiene il messaggio di benvenuto.
Mentre in Struts 1 i parametri di ciascuna Action vengono gestiti mediante un Form Bean, in Struts 2 i parametri vengono definiti direttamente nella Action. In entrambi i casi occorre implementare, per ciascun parametro, i classici metodi getter
e setter
che vengono richiamati automaticamente dal framework per la lettura e la scrittura.
La nostra action avrà due proprietà di tipo Stringa: nome e cognome.
Nel metodo execute della action verifichiamo che l'utente abbia impostato nome e cognome controllando la lunghezza delle stringhe. Qualora uno dei parametri è vuoto, riportiamo l'utente nella maschera di inserimento dati. Per segnalare un errore al framework è possibile usare il metodo addActionError
che riceve in input il messaggio da far visualizzare. Naturalmente è corretto acquisire il messaggio d'errore direttamente dal resource bundle usando il metodo getText
che va a leggere il messaggio corrispondente alla lingua dell'utente loggato.
Listato 2. Action
package it.html.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
public class HtmlAction extends ActionSupport{
private static final long serialVersionUID = -6822656588379793714L;
private String nome;
private String cognome;
public String getNome(){
return nome;
}
public void setNome(String nome){
this.nome = nome;
}
public String getCognome(){
return cognome;
}
public void setCognome(String cognome){
this.cognome = cognome;
}
public String execute() throws Exception {
LocalizedTextUtil.addDefaultResourceBundle("Messaggi");
if (nome.length() == 0){
List<String> params = new ArrayList<String>(0);
params.add(getText("nome"));
addActionError(getText("campoObbligatorio", params));
return INPUT;
} else if (cognome.length() == 0) {
List<String> params = new ArrayList<String>(0);
params.add(getText("cognome"));
addActionError(getText("campoObbligatorio", params));
return INPUT;
}
return ActionSupport.SUCCESS;
}
}
Il file per l'internazionalizzazione è il seguente (Messaggi.properties):
Listato 3. File per l'internazionalizzazione
titolo=Titolo della pagina
benvenuto=Benvenuto
nome=Nome
cognome=Cognome
campoObbligatorio=Il campo {0} è obbligatorio
La pagina index.jsp, che contiene la maschera di inserimento, contiene il form la cui action è HtmlAction
che prenderà in carico la richiesta in seguito al submit dell'utente.
Listato 4. Pagina index.jsp
<s:i18n name="Messaggi">
<s:form action="/HtmlAction.action" method="POST">
<s:actionerror />
<s:textfield key="nome" name="nome" />
<s:textfield key="cognome" name="cognome" />
<s:submit />
</s:form>
</s:i18n>
Per inserire un campo di testo utilizziamo il comando <s:textfield>
il cui parametro name deve corrispondere ad una delle proprietà della Action. Il framework richiamerà in modo automatico i metodi get e set della proprietà, per leggere e scrivere il valore corrispondente.
Mediante il tag <s:actionerror />
, infine, è possibile stampare tutti gli errori riscontrati durante la validazione del form, cioè tutti quei messaggi che possiamo aggiungere nella action mediante il metodo addActionError
.
La pagina welcome.jsp contiene soltanto la stampa del messaggio di benvenuto. Per stampare una delle proprietà della action è possibile utilizzare il tag <s:property />
.
Listato 5. Pagina welcome.jsp
<s:i18n name="Messaggi">
<s:text name="benvenuto" /> <s:property value="nome" /> <s:property value="cognome" />
</s:i18n>