Struts Code Pieces – DynaValidatorActionForm Allgemeines Die

Transcrição

Struts Code Pieces – DynaValidatorActionForm Allgemeines Die
Struts Code Pieces – DynaValidatorActionForm
Diese Tutorial erläutert die Verwendung der Klasse DynaValidatorActionForm anhand eines
Beispiels.
Allgemeines
Autor:
Sascha Wolski
Sebastian Hennebrueder
http://www.laliluna.de/tutorials.html – Tutorials für Struts, EJB, xdoclet und eclipse.
Datum:
11. Februar 2005
Development Tools
Eclipse 3.x
Dependencies
Struts 1.1
Jboss oder Tomcat
PDF download: http://www.laliluna.de/download/struts-dynavalidatoraction-form-de.pdf
Source download: http://www.laliluna.de/download/struts-dynavalidatoraction-form-source.zip
Die DynaValidatorActionForm Klasse
Die Klasse DynaValidatorActionForm ist die dynamische Variante der ValidatorActionForm Klasse.
Der Entwickler definiert keine explizite Java-Klasse, sondern er definiert das Form-Bean und die
Eigenschaften innerhalb der Struts Config.
Die Besonderheit bei der DynaValidatorActionForm Klasse liegt in der Validierung von
Eigenschaften eines Form-Beans auf Basis von XML Dateien.
Struts ermittelt die Validierungsregeln für die Form-Bean Eigenschaften anhand des Pfades mit
dem eine Action aufgerufen wird (/path-to-action/action.do).
Es ist dadurch möglich ein Form-Bean für jede Action, in der es verwendet, nach anderen
Validierungsregeln zu testen.
Beispiel (Definition in struts-config.xml):
<form-beans >
<form-bean name="exampleForm"
type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="name" type="java.lang.String" initial="Adam"/>
<form-property name="age" type="java.lang.Integer" initial="23"/>
</form-bean>
</form-beans>
Das Form-Bean kann danach in einer Action verwendet werden. Unten sehen Sie das
ActionMapping in der Struts Config.
Beispiel:
<action attribute="exampleForm"
input="/form/example.jsp"
name="exampleForm"
path="/example"
scope="request"
type="my.package.ExampleAction" />
Validierung von Eigenschaften
Die Klasse DynaValidatorActionForm bietet die Möglichkeit Standard-Validierungen auf Basis von
XML Dateien zu nutzen. Struts bietet mehrere Validierungenregeln an, die sich in der XML Datei
validator-rules.xml wiederfinden. Diese Validierungsregeln können genutzt werden um
Eigenschaften des Form-Beans zu prüfen. Welche Validierung nun für welche Eigenschaft zum
Tragen kommt definiert man in einer separaten XML Datei (validation.xml)
Beispiel aus validation.xml:
<form-validation>
<formset>
<!-- validation mapping für example action -->
<form name="/example">
<field
property="name"
depends="required, minlength">
<arg0 key="exampleForm.name" />
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
Initialisierung von Eigenschaften
Die DynaValidatorActionForm Klasse bietet wie die Klasse ActionForm eine Methode reset(..) zum
Initialisieren von Eigenschaften an. Diese Methode wird automatisch von Struts aufgerufen und es
können innerhalb der Methode zum Beispiel Standardwerte für Eigenschaften gesetzt werden.
Beispiel:
public void reset(ActionMapping mapping,
HttpServletRequest request) {
}
//Initialisieren der Eigenschaft text
text = "Hello World";
Verwendung eines DynaValidatorActionForm Beans
Anhand einer Beispielanwendungen wird die Verwendung eines DynaValidatorActionForm Bean
aufgezeigt.
Erstellen des Form-Beans (struts-config.xml)
Öffne die struts-config.xml und definiere im oberen Teil, bei <form-beans> ein neues Form-Bean
vom Typ DynaValidatorActionForm. Weise dem Form-Bean zwei Eigenschaften Name, vom Typ
String und Alter, vom Typ Integer zu.
Das Attribut name definiert den Namen unter dem das Form-Bean angesprochen werden kann.
type definiert den Typ des Form-Beans in unserem Fall unsere DynaValidatorActionForm Klasse.
<form-poperty> definiert eine Eigenschaft, dabei legt man den Namen mit name und den Typ der
Eigenschaft mit type fest.
Initialisiere die beiden Eigenschaften mit einem Standardwert.
Das Form-Bean Mapping sollte wie folgt aussehen.
<form-beans >
<form-bean name="exampleForm"
type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="name" type="java.lang.String" initial="Adam
Weisshaupt"/>
<form-property name="age" type="java.lang.Integer" initial="23"/>
</form-bean>
</form-beans>
Erstellen der Action Klasse
Erstelle im Package de.laliluna.tutorial.dynavalidatoractionform.action neue Klasse
ExampleAction.
Die Klasse erbt von der Klasse Action.
Implementiere die Methode execute(..).
Zuweisen der DynaValidatorActionForm Klasse
Zugriff und Ausgabe der Variablen name und age innerhalb der Action Klasse.
Der folgende Quellcode zeigt die Klasse ExampleAction
public class ExampleAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
//ActionForm zuweisen
DynaValidatorActionForm exampleForm = (DynaValidatorActionForm)
form;
//Zugriff auf Eigenschaften der BeanValidatorForm
//Klasse innerhalb der Action Klasse
System.out.println(exampleForm.get("name"));
System.out.println(exampleForm.get("age"));
}
return mapping.findForward("showExample");
}
Erstellen der JSP Dateien
Erstelle im Verzeichnis ../WebRoot/form/ des Projektes zwei neue JSP Datei mit dem Namen
example1.jsp und example2.jsp.
Kopiere den unterstehenden Quelltext in die beiden JSP Dateien.
Ändere den Wert bei <html:form action=“..“> im ersten JSP auf /example1 und im zweiten JSP auf
/example2.
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
<head>
<title>JSP for exampleForm</title>
</head>
<body>
<html:form action="/example1">
<html:errors />
Name: <html:text property="name" /> <br>
Age: <html:text property="age" /> <br>
<html:submit value="Send"/>
</html:form>
</body>
</html>
Erstellen von zwei Action-Mappings (struts-config.xml)
Um den Umgang mit der DynaValidatorActionForm Klasse aufzuzeigen, erstellen wir zwei ActionMappings in der struts-config.xml. Bei beiden Action-Mappings wird das selbe Form-Bean
verwendet. Um uns ein wenig Arbeit zu ersparen nutzen wir auch gleich bei beiden Mappings die
gleiche Action Klasse ExampleAction.
Erstelle in der struts-config.xml innerhalb von <action-mapping> zwei Action-Mappings für die
Action Klasse. Weise der Action das Form-Bean exampleForm zu und erstelle ein Weiterleitung
auf die jeweiligen JSP Dateien.
Vergibt für die erste Action den Pfad (path) /example1 und für die zweite Action /example2.
name weisen wir der Action das Form-Bean zu.
input weisst auf eine JSP Datei die nach fehlerhafter Validierung der Daten ausgerufen wird. In
unserem Fall ist es die gleiche JSP Datei, die auch zur Anzeige des Formulars verwendet wird.
type weist der Action die Action Klasse ExampleAction zu.
<forward ...> weisst auf die JSP Datei example1.jsp und example2.jsp.
<action-mappings >
<action
attribute="exampleForm"
input="/form/example1.jsp"
name="exampleForm"
path="/example1"
scope="request"
type="de.laliluna.tutorial.dynavalidatoractionform.action.ExampleAction
">
<forward name="showExample" path="/form/example1.jsp" />
</action>
">
<action
attribute="exampleForm"
input="/form/example2.jsp"
name="exampleForm"
path="/example2"
scope="request"
type="de.laliluna.tutorial.dynavalidatoractionform.action.ExampleAction
<forward name="showExample" path="/form/example2.jsp" />
</action>
</action-mappings>
Validierung der Eigenschaften auf Basis einer XML Datei
Erstelle im Verzeichnis /WebRoot/WEB-INF/ die XML Datei validation.xml und lege für jedes
Action-Mapping Validierungsregeln an.
Beim ersten Action-Mapping soll der Name und das Alter validiert werden, wobei der Name
mindestens aus 3 Zeichen bestehen muss und das Alter zwischen 1 und 150 liegt.
Beim zweiten Action-Mapping soll nur der Name validiert werden, wobei der Name mindestens
aus 6 Zeichen bestehen muss.
<form name=“..“> definiert hier den Action-Mapping Pfad für welches die Validierungen ausgeführt
werden sollen.
<field property=“..“> gibt die Eigenschaft im Form-Bean an, für die eine Validierung ausgeführt
werden soll. Mit dem Attribut depends legt man die Regeln der Validierung fest (Regeln sind in der
validator-rules.xml festgelegt).
<arg0 key=“..“> definiert einen Schlüssel für die Fehlerausgabe. Bei der Fehlerausgabe wird der
Platzhalter {0} durch den Wert des Schlüssels ersetzt. (siehe MessageResouce).
<var-name> gibt den Name einer Variablen an, die für eine Validierungsregel genutzt wird und
<var-value> den Wert der Variablen.
Erstelle folgende Validierungen für die Form-Bean Eigenschaften:
<form-validation>
<formset>
<!-- validation mapping for action /example1 -->
<form name="/example1">
<field
property="name"
depends="required, minlength">
<arg0 key="exampleForm.name" />
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
<field
property="age"
depends="required, intRange, integer">
<arg0 key="exampleForm.age"/>
<arg1 name="intRange" key="${var:min}" resource="false" />
<arg2 name="intRange" key="${var:max}" resource="false" />
<var>
<var-name>min</var-name>
<var-value>1</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>150</var-value>
</var>
</field>
</form>
<!-- validation mapping for action /example2 -->
<form name="/example2">
<field
property="name"
depends="required, minlength">
<arg0 key="exampleForm.name" />
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
Aktivieren des ValidatorPlugins in der Struts Config
Um den Struts-Validator zu nutzen muss das ValidatorPlugin und die zu verwendenden XML
Dateien in der Struts Config angegeben werden.
Öffne die Datei struts-config.xml und füge folgende Einstellungen an das Ende innerhalb des Tag
<struts-config> ein.
Mit dem Tag <set-property ...> definiert man die XML Dateien die vom ValidatorPlugin verwendet
werden.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
Erstellen einer Message Resource Datei
Die Message Resource Datei wird für die Ausgabe der Fehlermeldungen benötigt und enthält die
benötigten Texte für die Fehlerausgabe.
Erstelle im Package de.laliluna.tutorial.dynavalidatoractionform eine neue Datei mit dem Namen
ApplicationResources.properties
Nähere Informationen zu Message Resource Dateien erhält man im MessageResource Tutorial
http://www.laliluna.de/struts-message-resources-tutorial-de.html
Füge die folgenden Zeilen in die Datei:
errors.suffix=<br>
# -- default error messages for struts validator
errors.required='{0}' is required.
errors.minlength='{0}' can not be less than {1} characters.
errors.range='{0}' is not in the range {1} through {2}.
# -- field names
exampleForm.name=Name
exampleForm.age=Age
Öffne die struts-config.xml und füge die folgende Zeile hinzu:
<message-resources
parameter="de.laliluna.tutorial.dynavalidatoractionform.ApplicationResources" />
Testen des Beispiels
Damit haben wir anhand eines kleinen Beispiels, die Verwendung der Klasse
DynaValidatorActionForm näher gebracht. Das Beispiel kann jetzt getestet werden. Rufen Sie die
Anwendung mit folgenden Links auf. (Achtung: wir setzten eine Standardinstallation von JBOSS
oder Tomcat voraus.)
http://localhost:8080/DynaValidatorActionForm/example1.do
(Validierung von Name und Alter)
http://localhost:8080/DynaValidatorActionForm/example2.do
(Validierung von Name)