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 indica quale sarà l’action che verrà chiamata dal submit.

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&ograve; 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

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>