Struts Code Pieces – LazyValidatorForm Allgemeines Die
Transcrição
Struts Code Pieces – LazyValidatorForm Allgemeines Die
Struts Code Pieces – LazyValidatorForm Diese Tutorial erläutert die Verwendung der Klasse LazyValidatorForm 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 PDF download: http://www.laliluna.de/download/struts-lazyvalidator-form-tutorial-de.pdf Source download: http://www.laliluna.de/download/struts-lazyvalidator-form-tutorial-source.zip Die LazyValidatorForm Klasse Die LazyValidatorForm ist eine dynamische Variante eines Form-Beans und benötigt keine JavaKlasse. Man definiert das Form-Bean vom Typ LazyValidatorForm in der Struts Config. Die Besonderheit dieser Variante, es ist nicht zwingend erforderlich, dass man die Eigenschaften des Form-Beans in der Struts Config angibt. Die Klasse erkennt die benötigten Eigenschaften und erstellt diese dynamisch. Beispiel eines LazyValidatorForm Beans: <form-beans> <form-bean name="exampleForm" type="org.apache.struts.validator.LazyValidatorForm" /> </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 LazyValidatorForm 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 Durch Angabe der Eigenschaft in der Struts Config kann man hier auch einen Standardwert initialisieren. Den Standardwert einer Eigenschaft kann man mit Hilfe eines Attributes initial innerhalb des <form-property> Tags in der Struts Config Datei festlegen. Beispiel: <form-beans> <form-bean name="exampleForm" type="org.apache.struts.validator.LazyValidatorForm"> <form-property name="age" type="java.lang.Integer" initial="23" /> </form-beans> Verwendung eines LazyValidatorForm Beans Anhand einer Beispielanwendungen wird jetzt die Verwendung eines LazyValidatorForm Bean aufgezeigt. Erstellen des Form-Beans (struts-config.xml) Öffne die struts-config.xml und füge im oberen Teil, bei <form-bean>, das Form-Bean vom Typ LazyValidatorForm hinzu. Wir verzichten hier auf das Erstellen von Eigenschaften, um die Besonderheit der Klasse LazyValidatorForm aufzuzeigen, daher werden auch keine Standardwerte festgelegt. Das Form-Bean Mapping sollte wie folgt aussehen. <form-beans > <form-bean name="exampleForm" type="org.apache.struts.validator.LazyValidatorForm" /> </form-beans> Erstellen der Action Klasse Erstelle im Package de.laliluna.tutorial.lazyvalidatorform.action neue Klasse ExampleAction. Die Klasse erbt von der Klasse Action. Implementiere die Methode execute(..). Zuweisen der LazyValidatorForm 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) { //LazyValidatorForm zuweisen LazyValidatorForm exampleForm = (LazyValidatorForm) form; //Zugriff auf Eigenschaften der LazyValidatorForm //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 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 aufgerufen 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.lazyvalidatorform.action.ExampleAction"> <forward name="showExample" path="/form/example.jsp" /> </action> </action-mappings> 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="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> </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.lazyvalidatorform 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}. errors.integer={0} must be an integer. # -- 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.lazyvalidatorform.ApplicationResources" /> Testen des Beispiels Damit haben wir dir anhand eines kleinen Beispiels, die Verwendung der Klasse LazyValidatorForm 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/LazyValidatorForm/example.do