Struts Code Peaces – Element Allgemeines Das

Transcrição

Struts Code Peaces – Element Allgemeines Das
Struts Code Peaces – <html:options> Element
Es wird das Struts <html:options> 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
Das <html:options> Element
Das <html:options> Element ist Bestandteil eines <html:select> Elements und kann auch nur
innerhalb dieses genutzt werden. Zur Laufzeit wird ein HTML <option> Element gerendert. Das
<html:options> Element wird genutzt um Listen von Daten in einer HTML Selectbox auszugeben.
Es können beliebig viele <html:options> Elemente innerhalb des <html:select> Elements
verwendet werden.
Folgendes Beispiel zeigt den Quelltext der JSP Datei:
<html:select property="selectedItem">
<html:options collection="customers" property="id" labelProperty="name" />
</html:select>
Folgender HTML Quelltext wird zur Laufzeit von Struts ausgegeben:
<select name="selectedItem">
<option value="1">Marie</option>
<option value="2">Klaus</option>
</select>
Attribute des <html:options> Elements
Die wichtigsten Attribute werden kurz erläutert. Die vollständige Liste aller Attribute findet man in
der API zu der HTML Tag Bibliothek von Struts.
http://struts.apache.org/userGuide/struts-html
Name
collection
Beschreibung
Name einer Collection (in einem Scope). Diese Collection enthält andere Beans.
Name des Bean (in einem Scope) das eine Collection von Anzeigetexten (Labels) enthält
labelName
die dem Benutzer angezeigt werden.
Eigenschat des Beans oder des Beans das mit labelName angeben wird, das die
labelProperty
Anzeigetexte (Labels), die dem Benutzer angezeigt werden, enthält.
name
Name eines Beans (in einem Scope) das eine Collection von Werten enthält.
Eigenschaft eines Form-Beans oder dem Bean, welches durch das name Attribut angeben
property
wird, was eine Collection von Werten enthält. Diese Werte werden beim Abschicken des
Formulars übertragen, wenn das Element ausgewählt wurde.
Verwenden des <html:options> Elements
Erstelle ein neues Struts Projekt um die Verwendung des <html:options> Elements zu
veranschaulichen.
Erstellen einer Objektklasse
Erstelle eine neue Java-Klasse Customer im Package de.laliluna.tutorial.options.object. Diese
Klasse repräsentiert einen Kunden (Customer).
Erstelle zwei Eigenschaften, id vom Typ int und name vom Typ String und erstelle 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 int id;
private String name;
public Customer(){}
public Customer(int id, String name){
this.id = id;
this.name = name;
}
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Erstellen eines neuen FormBeans
Erstelle eine ActionForm Klasse ExampleForm im Package de.laliluna.tutorial.options.form.
Definiere eine Eigenschaft vom Typ String die dem <html:select> Element zugewiesen wird. Diese
Eigenschaft beinhaltet später den ausgewählten Wert aus der HTML Selectbox.
Erstelle im Anschluss zwei Eigenschaften vom Typ Collection. Die Eigenschaft customerValues
beinhaltet die Werte der Kunden. Die Eigenschaft customerLabels beinhaltet die Anzeigetexte für
die Kunden.
Erstelle für jede Eigenschaft einige Dummy-Daten.
Folgender Quelltext zeigt die ActionForm Klasse:
public class ExampleForm extends ActionForm {
private String selectedItem;
private Collection customerLabels;
private Collection customerValues;
public String getSelectedItem() {
return selectedItem;
}
public void setSelectedItem(String selectedItem) {
this.selectedItem = selectedItem;
}
public Collection getCustomerLabels() {
// define some dummy labels
customerLabels = new ArrayList();
customerLabels.add("Marie");
customerLabels.add("Klaus");
customerLabels.add("Peter");
return customerLabels;
}
public void setCustomerLabels(Collection customerLabels) {
this.customerLabels = customerLabels;
}
public Collection getCustomerValues() {
// define some dummy names
customerValues = new ArrayList();
customerValues.add("1");
customerValues.add("2");
customerValues.add("3");
}
return customerValues;
}
public void setCustomerValues(Collection customerValues) {
this.customerValues = customerValues;
}
Erstellen einer neues Action Klasse
Lege eine neue Action Klasse ExampleAction im Package de.laliluna.tutorial.options.action an.
Wir stellen einige Dummy-Daten als Collection bereit, die wir später für die Ausgabe benötigen.
public class ExampleAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
ExampleForm exampleForm = (ExampleForm) form;
//define a dummy collection
Collection customers = new ArrayList();
customers.add(new Customer(1, "Marie"));
customers.add(new Customer(2, "Klaus"));
customers.add(new Customer(3, "Peter"));
//set the collection in the request
request.setAttribute("customers", customers);
}
}
return mapping.findForward("success");
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.options.form.ExampleForm" />
</form-beans>
<action-mappings>
<action
name="exampleForm"
path="/example"
scope="request"
type="de.laliluna.tutorial.options.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 Attribut property des <html:select> Elements weist auf unsere Eigenschaft selectedItem im
Form-Bean, die nachdem Abschicken des Formulars den ausgewählten Wert beinhaltet. In
diesem Bespiel wird das Attribut collection genutzt, was auf die in der Action Klasse im Request
abgelegte Collection von Kunden (Customers) weisst. Das Attribut property gibt den Wert, der
beim Abschicken des Formulars übertragen wird an. In diesem Fall die Eigenschaft id der
Customer Klasse. labelProperty wird genutzt um den Anzeigetext (Label) des HTML <option>
Elements zu setzen und bezieht auf die Eigenschaft name der Customer Klasse.
<h4>Use collection attribute of the &lt;html:options&gt; Tag</h4>
<html:select property="selectedItem">
<html:options collection="customers" property="id" labelProperty="name" />
</html:select>
<html:submit/>
Beispiel 2
Im zweiten Beispiel wird ohne das collection Attribut gearbeitet. Wir weisen mit dem Attribut
property direkt auf die Collection customerValues in unserem Form-Bean. Mit labelProperty
beziehen wir uns auch hier auf eine Collection customerLabels innerhalb unseres Form-Beans,
welche die Anzeigetexte (Labels) für die HTML <option> Elemente beinhaltet.
<h4>Use property attribute of the &lt;html:options&gt; Tag</h4>
<html:select property="selectedItem">
<html:options property="customerValues" labelProperty="customerLabels" />
</html:select>
<html:submit/>
Das Projekt kann jetzt getestet werden. Rufe das Projekt über folgende URL auf.
http://localhost:8080/OptionsTag/example.do