Struts Code Peaces – Element Allgemeines Das
Transcription
Struts Code Peaces – Element Allgemeines Das
Struts Code Peaces – <html:checkbox> Element Es wird das Struts <html:checkbox> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder http://www.laliluna.de/tutorials.html – Tutorials für Struts, EJB, xdoclet und eclipse. Datum: 15. Februar 2005 Development Tools Eclipse 3.x MyEclipse 3.8.x Application Server Jboss 3.2.5 Es kann auch Tomcat genutzt werden. Das <html:checkbox> Element Das <html:checkbox> Element wird in Verbindung mit einer Eigenschaft vom Typ boolean verwendet. Es wird zur Laufzeit ein <input> Element vom Typ checkbox gerendert. Folgendes Beispiel zeigt den Quelltext der JSP Datei: <html:checkbox property="checked">Label</html:checkbox> Folgender HTML Quelltext wird zur Laufzeit von Struts ausgegeben: <input type="checkbox" name="checked" value="on">Label Attribute des <html:checkbox> Elements Die wichtigsten Attribute werden kurz erläutert. Die vollständige Liste aller Attribute findet man in der API zu der HTML Tag Biliothek von Struts. http://struts.apache.org/userGuide/struts-html.html#checkbox Name disabled indexed name property value Beschreibung Deaktiviert das Element (true / false) Nur gültig innerhalb eines logic:iterate Tags. Ist der Wert true, wird der Name des HTML Elements als „id[3].property“ gerendert. id = Scope der Eigenschaft, property = Eigenschaft. Die Zahl innerhalb der eckigen Klammern wird anhand des aktuellen Index des Schleifendurchlaufes bestimmt. Name des Bean das die Eigenschaft, die dem Element zugewiesen werden soll, enthält. Name der Eigenschaft oder des Requestparameters das dem Element zugewiesen werden soll. Der Wert der nachdem Abschicken des Formulars übertragen wird. Wenn nicht angegeben wird ein Standardwert „on“ gesetzt. Wenn angeben muss dieser Wert mit folgenden Strings übereinstimmten („true“, „on“, „yes“). Verwenden des <html:checkbox> Elements Erstelle ein neues Struts Projekt um die Verwendung des <html:checkbox> Elements zu veranschaulichen. Erstellen einer Objektklasse Erstelle eine neue Java-Klasse Customer im Package de.laliluna.tutorial.checkbox.object. Diese Klasse repräsentiert einen Kunden (Customer). Erstelle zwei Eigenschaften, name vom Typ String und checked vom Typ boolean und generiere für jede Eigenschaft eine Getter- und Setter-Methode. Definiere noch einen Konstruktor, der es erlaubt die beiden Eigenschaften beim Initialisieren der Klasse zu setzen. Die Objektklasse sieht wie folgt aus. public class Customer { private String name; private boolean checked; public Customer(){} public Customer(String name, boolean checked){ this.name = name; this.checked = checked; } } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public String getName() { return name; } public void setName(String name) { this.name = name; } Erstellen einer neues Action Klasse Lege eine neue Action Klasse ExampleAction im Package de.laliluna.tutorial.checkbox.action an. public class ExampleAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ExampleForm exampleForm = (ExampleForm) form; } } return mapping.findForward("success"); Erstellen eines neuen FormBeans Erstelle eine ActionForm Klasse ExampleForm im Package de.laliluna.tutorial.checkbox.form. Definiere eine Eigenschaft checked vom Typ boolean, diese wird einem <html:checkbox> Element zugewiesen und enthält den Wert (true / false) nachdem das Formular abgeschickt wurde. Eine weitere Eigenschaft customers vom Typ Collection stellt eine Liste von Daten (Kunden) bereit. Damit wird die Verwendung von <html:checkbox> Elementen innerhalb von Listen gezeigt. Implementiere die reset() Methode der ActionForm Klasse und initialisiere die Eigenschaft checked mit false. Innerhalb der reset() Methode stellen wir noch einige Dummy-Daten bereit und initialisieren damit die Collection customers. Folgender Quelltext zeigt die ActionForm Klasse public class ExampleForm extends ActionForm { private boolean checked; private Collection customers; public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public Collection getCustomers() { return customers; } public void setCustomers(Collection customers) { this.customers = customers; } /** * reset method * @param mapping * @param request */ public void reset(ActionMapping mapping, HttpServletRequest request) { //reset properties this.checked = false; //initial the customers collection customers = new ArrayList(); customers.add(new Customer("Marie", false)); customers.add(new Customer("Klaus", false)); customers.add(new Customer("Peter", false)); } } Erstellen der struts-config.xml Öffne im Anschluss daran die struts-config.xml und definiere das FormBean und das ActionMapping. <struts-config> <form-beans> <form-bean name="exampleForm" type="de.laliluna.tutorial.checkbox.form.ExampleForm" /> </form-beans> <action-mappings> <action name="exampleForm" path="/example" scope="request" type="de.laliluna.tutorial.checkbox.action.ExampleAction"> <forward name="success" path="/form/example.jsp" /> </action> </action-mappings> </struts-config> Erstellen der JSP Datei Erstelle im Verzeichnis /WebRoot/form/ eine JSP Datei example.jsp. Öffne die JSP Datei example.jsp und füge folgenden Quelltext hinzu. <%@ <%@ <%@ <%@ 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"%> taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%> <html> <head> <title>example.jsp</title> </head> <body> <html:form action="/example"> .... sample code ... </html:form> </body> </html> Füge innerhalb des <html:form> Elements das erste Beispiel ein. Beispiel 1 Das erste Beispiel zeigt nur eine Checkbox. Mit dem Attribut property weisen wir die Eigenschaft checked des Form-Beans zu. Wird die Checkbox vom Benutzer markiert und abgeschickt, so wird der übertragene String („on“, „true“ oder „yes“) in einen boolean Wert umgewandelt und in der Eigenschaft checked des Form-Beans gesetzt. <h4>Simple use of <html:checkbox> Tag</h4> <html:checkbox property="checked">Label</html:checkbox> <br /><br /> <html:submit property="btnApply"/> Beispiel 2 Im zweiten Beispiel wird die Verwendung eines <html:checkbox> Elements innerhalb eines <logic:iterate> Tags gezeigt. Wir nutzen dazu die Eigenschaften customers vom Typ Collection und verwen die darin befindliche Liste von Kunden. Das Attribut name des <logic:iterate> Elements gibt das Bean an, in dem sich die Collection befindet, in unserem Falle das Form-Bean exampleForm. Das Attribut property gibt den Namen der Collection innerhalb des Beans an. Mit dem Attribut id definiert man einen Namen für eine Variable, die das aktuelle Element der Collection bei jedem Schleifendurchlauf enthält. Hinweis: Um eine Eigenschaften eines Elements innerhalb der Collection zu einem <html:checkbox> Element zu zuweisen, muss das Attribut id des <logic:iterate> Tags gleich dem Namen der Collection innerhalb des Form-Beans sein. Desweiteren muss das Attribut indexed des <html:checkbox> Elements auf „true“ gesetzt werden. Mit dem Attribute name des <html:checkbox> Elements wird auf den im <logic:iterate> Tag mit id definierten Variabel gewiesen. Mit dem Attribut property wird auf die Eigenschaft checked der Objekt-Klasse referenziert. Setze den Wert des Attributs indexed auf „true“, da sich das <html:checkbox> Elements innerhalb eines <logic:iterate> Tags befindet. <h4>Use of <html:checkbox> Tag inside a <logic:iterate></h4> <logic:iterate name="exampleForm" property="customers" id="customers"> <html:checkbox name="customers" property="checked" indexed="true"> <bean:write name="customers" property="name" /> <br /> </html:checkbox> </logic:iterate> <br /> <html:submit property="btnApply"/> Das Projekt kann jetzt getestet werden. Dazu wird eine Jboss oder Tomcat Installation vorausgesetzt. Deploye das Projekt und rufe es über folgende URL auf. http://localhost:8080/CheckboxTag/example.do