15. Voorbeeld 12 – Diverse conversies en validaties
De nieuwe applicatie biedt de mogelijkheid om diverse elementen in te voeren met Struts-validators:
![]() |
- in [1], het invoerformulier
- naar [2], de bevestiging van de invoer
De applicatie werkt op dezelfde manier als de vorige, dus zullen we alleen de punten bespreken die verschillen.
15.1. Het NetBeans-project
Het NetBeans-project is als volgt:
![]() |
- in [1], de weergaven van de applicatie
- [Accueil.JSP]: de startpagina
- [FormDivers.JSP]: het invoerformulier
- [ConfirmationFormDivers.JSP]: de bevestigingspagina
- in [2], het berichtenbestand [messages.properties] en het hoofdconfiguratiebestand van Struts
- in [3]:
- [FormDivers.java]: de actie die het formulier weergeeft en verwerkt
- [FormDivers-validation.xml]: de validatieregels voor de actie [FormDivers]. Dit bestand delegeert deze validaties aan het model.
- [FormDiversModel]: het model van de actie [FormDivers]
- [ FormDiversModel-validation.xml]: de validatieregels van het model
- [FormDiversModel.properties]: het berichtenbestand van het model
- [example.xml]: secundair configuratiebestand van Struts
15.2. De configuratie van het project
Het project wordt voornamelijk geconfigureerd via het volgende bestand [example.xml]:
<?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>
<package name="example" namespace="/example" extends="struts-default">
<action name="Accueil">
<result name="success">/example/Accueil.JSP</result>
</action>
<action name="FormDivers" class="example.FormDivers">
<result name="input">/example/FormDivers.JSP</result>
<result name="cancel" type="redirect">/example/Accueil.JSP</result>
<result name="success">/example/ConfirmationFormDivers.JSP</result>
</action>
</package>
</struts>
Dit bestand is vergelijkbaar met het bestand dat in eerdere versies is besproken.
15.3. De berichtenbestanden
Het bestand [messages.properties] is als volgt:
Accueil.titre=Accueil
Accueil.message=Struts 2 - Conversions et validations
Accueil.FormDivers=Saisies diverses (email, URL, chaine de caract\u00e8res avec contr\u00f4le du nombre de caract\u00e8res)
Form.titre=Conversions et validations
FormDivers.message=Struts 2 - Conversions et validations de types divers
Form.submitText=Valider
Form.cancelText=Annuler
Form.clearModel=Raz mod\u00e8le
Confirmation.titre=Confirmation
Confirmation.message=Confirmation des valeurs saisies
Confirmation.champ=champ
Confirmation.valeur=valeur
Confirmation.lien=Formulaire de test
xwork.default.invalid.fieldvalue=Valeur invalide pour le champ "{0}".
Het bestand [FormDiversModel.properties] ziet er als volgt uit:
email.prompt=1-Tapez une adresse \u00E9lectronique (x@y.z)
email.error=Format invalide
URL.prompt=2-Tapez une URL (http://www.ibm.com)
URL.error=Format invalide
chaine.prompt=3-Tapez une chaine de 5 caract\u00E8res
chaine.error=Format invalide
15.4. Het invoerformulier
De weergave [FormDivers.JSP] ziet er als volgt uit:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title><s:text name="Form.titre"/></title>
<s:head/>
</head>
<body background="<s:url value="/ressources/standard.jpg"/>">
<h2><s:text name="FormDivers.message"/></h2>
<s:form name="formulaire" action="FormDivers">
<s:textfield name="email" key="email.prompt" size="30"/>
<s:textfield name="URL1" key="URL.prompt" size="30"/>
<s:textfield name="chaine" key="chaine.prompt" size="10"/>
<s:submit key="Form.submitText" method="execute"/>
</s:form>
<br/>
<s:url id="URL" action="FormDivers" method="cancel"/>
<s:a href="%{URL}"><s:text name="Form.cancelText"/></s:a>
<br/>
<s:url id="URL" action="FormDivers" method="clearModel"/>
<s:a href="%{URL}"><s:text name="Form.clearModel"/></s:a>
</body>
</html>
De regels 12 tot en met 14 zijn de drie invoervelden.
15.5. Het bevestigingsscherm
Het bevestigingsscherm [ConfirmationFormDivers.JSP] ziet er als volgt uit:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title><s:text name="Confirmation.titre"/></title>
<s:head/>
</head>
<body background="<s:url value="/ressources/standard.jpg"/>">
<h2><s:text name="Confirmation.message"/></h2>
<table border="1">
<tr>
<th><s:text name="Confirmation.champ"/></th>
<th><s:text name="Confirmation.valeur"/></th>
</tr>
<tr>
<td><s:text name="email.prompt"/></td>
<td><s:text name="email"/></td>
</tr>
<tr>
<td><s:text name="URL.prompt"/></td>
<td><s:text name="URL1"/></td>
</tr>
<tr>
<td><s:text name="chaine.prompt"/></td>
<td><s:text name="chaine"/></td>
</tr>
</table>
<br/>
<s:url id="URL" action="FormDivers!input"/>
<s:a href="%{URL}"><s:text name="Confirmation.lien"/></s:a>
</body>
</html>
15.6. Het sjabloon [FormDiversModel]
De invoervelden van het formulier [FormDivers.JSP] worden in het volgende sjabloon [FormDiversModel] ingevoegd:
package example;
public class FormDiversModel {
// constructor zonder parameters
public FormDiversModel() {
}
// velden
private String email;
private String URL1 ;
private String chaine;
// model resetten
public void clearModel() {
email = null;
URL1 = null;
chaine = null;
}
// getters en setters
...
}
15.7. De validatie van het sjabloon
De validatie van het sjabloon wordt gecontroleerd door twee bestanden: [FormDivers-validation.xml] en [FormDiversModel-validation.xml].
Het bestand [FormDivers-validation.xml] delegeert de validaties aan het volgende bestand [FormDiversModel-validation.xml]:
<!--
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://localhost:8084/voorbeeld-10/example/xwork-validator-1.0.2.dtd">
<validators>
<field name="model" >
<field-validator type="visitor">
<param name="appendPrefix">false</param>
<message/>
</field-validator>
</field>
</validators>
We zijn dit bestand al eerder tegengekomen.
Het bestand [FormDateModel-validation.xml] bevat de volgende validatieregels:
<!--
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://localhost:8084/voorbeeld-12/example/xwork-validator-1.0.2.dtd">
<validators>
<field name="email" >
<field-validator type="requiredstring" short-circuit="true">
<message key="email.error"/>
</field-validator>
<field-validator type="email" short-circuit="true">
<message key="email.error"/>
</field-validator>
</field>
<field name="URL1" >
<field-validator type="requiredstring" short-circuit="true">
<message key="URL.error"/>
</field-validator>
<field-validator type="URL" short-circuit="true">
<message key="URL.error"/>
</field-validator>
</field>
<field name="chaine" >
<field-validator type="requiredstring" short-circuit="true">
<message key="chaine.error"/>
</field-validator>
<field-validator type="stringlength" short-circuit="true">
<param name="minLength">5</param>
<param name="maxLength">5</param>
<message key="chaine.error"/>
</field-validator>
</field>
</validators>
- regels 11-18: controleren of het veld email geldig is
- regels 15-17: controleren of de tekenreeks email een geldig e-mailadres is
- regels 20-27: controleren de geldigheid van het veld URL1
- regels 24-26: controleren of de tekenreeks URL1 een geldige URL is
- regels 29-38: controleren de geldigheid van het veld chaine
- regels 33-37: controleren of de tekenreeks chaine precies 5 tekens bevat.
15.8. De actie [FormDivers]
De actie [FormDivers] is als volgt:
package example;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.interceptor.validation.SkipValidation;
public class FormDivers extends ActionSupport implements ModelDriven, SessionAware {
// constructor zonder parameters
public FormDivers() {
}
// actiemodel
public Object getModel() {
if (session.get("model") == null) {
session.put("model", new FormDiversModel());
}
return session.get("model");
}
@SkipValidation
public String clearModel() {
// model-raz
((FormDiversModel) getModel()).clearModel();
// resultaat
return INPUT;
}
public String cancel() {
// het model wordt opgeschoond
((FormDiversModel) getModel()).clearModel();
// resultaat
return "cancel";
}
// SessionAware
Map<String, Object> session;
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
De actie [FormDivers] is opgebouwd volgens hetzelfde model als de eerder besproken acties. Hier ontbreekt echter de methode validate om de validatie door het bestand [FormDiversModel-validation.xml] aan te vullen.

