Inhaltsverzeichnis

Transcrição

Inhaltsverzeichnis
Struts Code Pieces – BeanValidatorForm
Diese Tutorial erläutert die Verwendung der Klasse BeanValidatorForm anhand eines Beispiels.
Allgemeines
Autor:
Sascha Wolski
Sebastian Hennebrueder
http://www.laliluna.de/tutorials.html – Tutorials für Struts, EJB, xdoclet und eclipse.
Datum:
10. Februar 2005
Development Tools
Eclipse 3.x
Dependencies
Struts 1.1
Jboss oder Tomcat
PDF download: http://www.laliluna.de/download/struts-beanvalidator-form-tutorial-de.pdf
Source download: http://www.laliluna.de/download/struts-beanvalidator-form-source.zip
Inhaltsverzeichnis
Struts Code Peaces – BeanValidatorForm.......................................................................................1
Allgemeines......................................................................................................................................1
Die BeanValidatorForm Klasse........................................................................................................1
Validierung von Eigenschaften....................................................................................................2
Initialisierung von Eigenschaften.................................................................................................2
Beispiel für die Verwendung eines BeanValidatorForm Beans.........................................................3
Erstellen einer POJO Klasse.......................................................................................................3
Erstellen der Action Klasse..........................................................................................................3
Erstellen der JSP Datei................................................................................................................4
Erstellen des Form-Beans (struts-config.xml)..............................................................................4
Erstellen der Action (struts-config.xml)........................................................................................4
Initialisieren von Eigenschaften innerhalb der POJO Klasse.......................................................5
Validierung der Eigenschaften auf Basis einer XML Datei...........................................................5
Aktivieren des ValidatorPlugins in der Struts Config....................................................................6
Erstellen einer Message Resource Datei.....................................................................................6
Testen des Beispiels....................................................................................................................6
Die BeanValidatorForm Klasse
Bei Verwendung der BeanValidatorForm kann der Entwickler ein normales Java-Objekt (POJO)
als FormBean einsetzten. Eine Ableitung von einer ActionKlasse ist dabei nicht notwendig. Diese
Funktionalität, die die Klasse BeanValidatorForm bietet ist erst aber der Version 1.2.4 von Struts
verfügbar.
Beispiel einer normalen Java-Klasse:
public class ExamplePOJO {}
Für die erstellte POJO Klasse wird in der Struts Config ein Name festgelegt.
Beispiel:
<form-beans >
<form-bean name="exampleForm" type="my.package.ExamplePOJO" />
</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 BeanValidatorForm 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 form -->
<form name="exampleForm">
<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
Da es sich bei der Klasse die als Form-Bean genutzt wird, um eine ganz normale Java-Klasse
handelt, kann man Standardwerte für die Eigenschaften im Konstruktor der Klasse festlegen.
Beispiel:
public class ExamplePOJO {
}
//Konstruktor zum Initialisieren
//von Eigenschaften
public ExamplePOJO(){
name = "Adam Weisshaupt";
age = 23;
}
Beispiel für die Verwendung eines BeanValidatorForm Beans
Anhand einer Beispielanwendungen wird jetzt die Verwendung eines BeanValidatorForm Bean
aufgezeigt.
Erstellen einer POJO Klasse
Erstelle eine neue Klasse ExamplePOJO in einem Package.
(Bsp: de.laliluna.tutorials.validatorform.pojo).
Erstelle zwei Eigenschaften, name (Name) vom Typ String und age (Alter) vom Typ int.
Für die Eigenschaften erstelle jeweils eine Getter- und Setter-Methode.
Die Klasse sollte wie folgt aussehen.
public class ExamplePOJO {
//Eigenschaften der Klasse
private String name;
private int age;
}
//Getter und Setter Methoden
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Erstellen der Action Klasse
Erstelle im Package de.laliluna.tutorial.beanvalidatorform.action neue Klasse ExampleAction.
Die Klasse erbt von der Klasse Action.
Implementiere die Methode execute(..).
Zuweisen der BeanValidatorForm
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) {
//BeanValidatorForm zuweisen
BeanValidatorForm exampleForm = (BeanValidatorForm) 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 Datei
Erstelle im Verzeichnis ../WebRoot/form/ des Projektes eine neue JSP Datei mit dem Namen
example.jsp.
Der folge Quelltext zeigt die JSP Datei.
<%@ 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="/example">
<html:errors />
Name: <html:text property="name" /> <br>
Age: <html:text property="age" /> <br>
<html:submit value="Send"/>
</html:form>
</body>
</html>
Erstellen des Form-Beans (struts-config.xml)
Öffne die struts-config.xml und füge im oberen Teil, bei <form-bean>, folgende Zeilen ein.
(Hinweis: Wir beziehen uns immer auf das Package de.laliluna.tutorial.beanvalidatorform)
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 ValidatorForm Klasse.
<form-beans >
<form-bean name="exampleForm"
type="de.laliluna.tutorial.beanvalidatorform.pojo.ExamplePOJO" />
</form-beans>
Erstellen der Action (struts-config.xml)
Erstelle in der struts-config.xml innerhalb von <action-mapping> die Action (ActionMapping) für die
Action Klasse. Weise der Action das Form-Bean exampleForm zu und erstelle ein Weiterleitung
auf die example.jsp Seite.
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 example.jsp.
<action-mappings>
<action
attribute="exampleForm"
input="/form/example.jsp"
name="exampleForm"
path="/example"
scope="request"
type="de.laliluna.tutorial.beanvalidatorform.action.ExampleAction">
<forward name="showExample" path="/form/example.jsp" />
</action>
</action-mappings>
Initialisieren von Eigenschaften innerhalb der POJO Klasse
Zum initialisieren von Eigenschaften erstellen wir in der Ojekt-Klasse ExamplePOJO einen
Konstruktor.
Folgender Quelltext zeigt den Konstruktor der Klasse ExamplePOJO.
public ExamplePOJO(){
name = "Adam Weisshaupt";
age = 23;
}
Validierung der Eigenschaften auf Basis einer XML Datei
Um die Daten nach der Eingabe zu überprüfen, zum Beispiel muss der Name mindestens aus 3
Zeichen bestehen und das Alter muss größer 0 und kleiner 150 sein, legen wir im Verzeichnis
/WebRoot/WEB-INF/ die XML Datei validation.xml an.
<form name=“..“> definiert das Form-Bean für das 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 für example form -->
<form name="exampleForm">
<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="intRange">
<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>
</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.beanvalidatorform 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.beanvalidatorform.ApplicationResources" />
Testen des Beispiels
Damit haben wir dir anhand eines kleinen Beispiels, die Verwendung der Klasse
BeanValidatorForm näher gebracht. Das Beispiel kann jetzt getestet werden. Rufen Sie die
Anwendung mit folgendem Link auf. (Achtung: wir setzten eine Standardinstallation von JBOSS
oder Tomcat voraus.)
http://localhost:8080/BeanValidatorForm/example.do