Inhaltsverzeichnis
Transcription
Inhaltsverzeichnis
Struts Code Peaces – ActionForm Diese Tutorial erläutert die Verwendung der Klasse ActionForm anhand eines Beispiels. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder http://www.laliluna.de/tutorials.html Tutorials für Struts, EJB, xdoclet und eclipse. Datum: 8. Februar 2005 Development Tools Eclipse 3.x Dependencies Struts 1.1 Jboss oder Tomcat PDF download: http://www.laliluna.de/download/struts-action-form-tutorial-de.pdf Source download: http://www.laliluna.de/download/struts-action-form-tutorial-source.zip Inhaltsverzeichnis Struts Code Peaces – ActionForm...................................................................................................1 Allgemeines......................................................................................................................................1 Die ActionForm Klasse.....................................................................................................................1 Validierung von Eigenschaften....................................................................................................2 Initialisierung von Eigenschaften.................................................................................................2 Beispiel für die Verwendung eines ActionForm Beans.....................................................................2 Erstellen der ActionForm 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 in ActionForm Klasse.................................................................5 Validierung der Eigenschaften in ActionForm Klasse..................................................................5 Erstellen einer Message Resource Datei.....................................................................................5 Testen des Beispiels....................................................................................................................6 Die ActionForm Klasse Der wohl am häufigsten verwendete Typ eines Form-Beans ist die ActionForm. Dafür erstellt der Entwickler eine Klasse die von der Klasse ActionForm erbt. Beispiel: public class ExampleForm extends ActionForm {} Für die erstellte FormBean Klasse wird in der Struts Config ein Name festgelegt. Beispiel: <form-beans > <form-bean name="exampleForm" type="my.package.ExampleForm" /> </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 ActionForm bietet eine Methode validate(..) zur Validierung von Daten an. Es ist nicht erforderlich diese Methode zu nutzen, sie ist Optional. Vorteil dieser Methode, sie wird nach dem Abschicken einer Formularseite automatisch aufgerufen und abgearbeitet. Innerhalb der Methode können dann die Daten geprüft und bei nicht zutreffenden, fehlerhaften Daten Fehler zurück gegeben werden. Bei Rückgabe von Fehlern wird automatisch auf die Seite, die im input Tag festgelegt ist, verwiesen, auf der man dann die entsprechenden Fehlermeldungen ausgeben kann. Beispiel: public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { //Instanz von ActionErrors erzeugen ActionErrors actionErrors = new ActionErrors(); //Validierung einer Eigenschaft if(text.length() == 0) actionErrors.add("example", new ActionMessage("Feld ist leer!")); } //Rückgabe der Fehler return actionErrors; Initialisierung von Eigenschaften Die ActionForm Klasse bietet eine Methode reset(..) zum Initialisieren von Eigenschaften an. Diese Methode wird beim Initialisieren des Form-Beans 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"; Beispiel für die Verwendung eines ActionForm Beans Anhand einer Beispielanwendungen wird jetzt die Verwendung eines Action Form Bean aufgezeigt. Erstellen der ActionForm Klasse Erstelle eine neue Klasse ExampleForm in einem Package. (Bsp: de.laliluna.tutorials.actionform.form). Die Klasse soll von der Klasse ActionForm erben. Erstelle zwei Eigenschaften, name (Name) und age (Alter). Für die Eigenschaften erstelle jeweils eine Getter- und Setter-Methode. Die Klasse sollte wie folgt aussehen. public class ExampleForm extends ActionForm { //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.actionform.action neue Klasse ExampleAction. Die Klasse erbt von der Klasse Action. Implementiere die Methode execute(..). Zuweisen der ActionForm 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 ExampleForm exampleForm = (ExampleForm) form; //Zugriff auf Eigenschaften der ActionForm //Klasse innerhalb der Action Klasse System.out.println(exampleForm.getName()); System.out.println(exampleForm.getAge()); } return mapping.findForward("success"); } 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.actionform) 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 ActionForm Klasse ExampleForm. <form-beans > <form-bean name="exampleForm" type="de.laliluna.tutorial.actionform.form.ExampleForm" /> </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 legt das Form Bean fest, das die Action verwendet. 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.actionform.action.ExampleAction"> <forward name="showExample" path="/form/example.jsp" /> </action> </action-mappings> Initialisieren von Eigenschaften in ActionForm Klasse Im nächsten Schritt bearbeiten wir die ActionForm Klasse ExampleForm und fügen die reset(..) Methode hinzu. Innerhalb der reset(..) Methode initialisieren wird die beiden Eigenschaften der ActionForm Klasse. Folgender Quelltext zeigt die Methode reset(..) der Klasse ExampleForm. public void reset(ActionMapping mapping, HttpServletRequest request) { //Initialisieren der Eigenschaften name = "Adam Weisshaupt"; age = 23; } Validierung der Eigenschaften in ActionForm Klasse 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 sein, verwenden wir die Methode validate(..) der ActionForm Klasse ExampleForm. Folgender Quelltext zeigt die validate(..) Methode der Klasse ExampleForm. public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { //Instanz von ActionErrors erzeugen ActionErrors actionErrors = new ActionErrors(); //Validierung der Eigenschaft 'name' if(name.length() < 3){ actionErrors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.name")); } //Validierung der Eigenschaft 'age' if(age < 1){ actionErrors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.age")); } } //Rückgabe der Fehler return actionErrors; 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.actionform 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> error.name=Name must have minimum 3 characters error.age=Age must be greater then 0 Öffne die struts-config.xml und füge die folgende Zeile hinzu: <message-resources parameter="de.laliluna.tutorial.actionform.ApplicationResources" /> Testen des Beispiels Damit haben wir dir anhand eines kleinen Beispiels, die Verwendung der Klasse ActionForm 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/ActionForm/example.do