Struts2: un esempio base di Form
Quando parlo di esempio base non scherzo eh… meno di così è veramente fatica.
In ogni caso, l’unica cosa da capire è questa: tutto quello che succede in struts2 è una action. O meglio, ogni url che viene chiamato è un’action. Quindi per visualizzare una form, catturarne il submit, eleborare il contenuto e sparare fuori il risultato servono almeno due action.
Potete usarne anche dieci, ma due bastano.
Partiamo dalla form. Utilizzo gli struts-tags, e questa è la mia jsp:
<s:form action="login"> <s:textfield name="utente" label="Utente"/> <s:password name="password" label="Password"/> <s:submit value="Login" /> </s:form> |
In questo esempio viene visualizzata da una action accedi che non fa assolutamente niente:
<action name="accedi"> <result>tiles.accedi</result> </action> |
raggiungibile con l’url:
http://localhost:8080/esempio-struts2-form/accedi
L’attributo action del tag
L’action login è definita in questo modo:
<action name="login" class="it.nicola.esempi.form.Base"> <result>tiles.risultato</result> <result name="input">tiles.accedi</result> </action> |
Il result input deve essere sempre presente quando l’action viene chiamata da una form. Indica al framework dove deve tornare (spesso e volentieri alla form di partenza) se qualche cosa è andato storto, come per esempio la validazione dei campi.
Nell’action che gestisce una form, ogni campo della forma deve avere la relativa proprietà, con tutti i get e i set a posto come ogni pojo che si rispetti.
L’action chiamata riceve i campi dalla post, che vengono mappati automaticamente, li elabora e spara fuori il risultato, che in questo esempio è rappresentato dalla risultato.jsp.
In definitiva:
Il file struts.xml
<struts> <constant name="struts.devMode" value="true" /> <constant name="struts.action.extension" value=","/> <package name="default" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" default="true" /> </result-types> </package> <package name="root" namespace="/" extends="default"> <default-action-ref name="index" /> <action name="index"> <result type="tiles" name="success">siteLayout</result> </action> <action name="accedi"> <result>tiles.accedi</result> </action> <action name="login" class="it.nicola.esempi.form.Base"> <result>tiles.risultato</result> <result name="input">tiles.accedi</result> </action> </package> </struts> |
La definizione della form
<h1>Esempio base di una form</h1> <p>Effettua il login con questi dati: <br />utente: Forza <br />password: Roma </p> <s:if test="hasActionErrors()"> <div class="errori"> <s:actionerror/> </div> </s:if> <s:if test="hasActionMessages()"> <div class="messaggi"> <s:actionmessage/> </div> </s:if> <s:form action="login"> <s:textfield name="utente" label="Utente"/> <s:password name="password" label="Password"/> <s:submit value="Login" /> </s:form> |
L’action
public class Base extends ActionSupport { private static final long serialVersionUID = 1L; private String utente; private String password; public String execute() throws Exception { if (utente.equals("Forza") && (password.equals("Roma"))) { addActionMessage("Forza Roma forza lupi sò finiti i tempi cupi"); return SUCCESS; } else { addActionError("Mi dispiace. Non sei uno dei nostri"); return INPUT; } } public String getUtente() { return utente; } public void setUtente(String utente) { this.utente = utente; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
Il risultato di tutto questo lo potete scaricare sotto forma di progetto maven.
Leave a Reply