<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>23A &#187; Java</title>
	<atom:link href="http://blog.davidgraesser.de/category/coding/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.davidgraesser.de</link>
	<description>code snippets and more...</description>
	<lastBuildDate>Tue, 08 Nov 2011 21:14:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Größe einer Liste in einer JSP darstellen</title>
		<link>http://blog.davidgraesser.de/2011/01/06/grose-einer-liste-in-einer-jsp-darstellen/</link>
		<comments>http://blog.davidgraesser.de/2011/01/06/grose-einer-liste-in-einer-jsp-darstellen/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 09:42:35 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[arraylist]]></category>
		<category><![CDATA[core jstl]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java.lang.String]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[size]]></category>
		<category><![CDATA[The "." operator was supplied]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=204</guid>
		<description><![CDATA[Wieder mal ein klassisches, simples Problem. In einer JSP kann man nicht auf die Methode size() einer java.util.List zugreifen, das die JSTL mit dem Aufruf &#60;c:out value=&#8220;${list.size}&#8221;/&#62; einen Getter erwartet und folgende Fehlermeldung produziert: The &#8220;.&#8221; operator was supplied with an index value of type &#8220;java.lang.String&#8221; to be applied to a List or array&#8230; Die [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder mal ein klassisches, simples Problem. In einer JSP kann man nicht auf die Methode size() einer java.util.List zugreifen, das die JSTL mit dem Aufruf </p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc2">&lt;c:out <span class="kw3">value</span>=<span class="st0">&#8220;${list.size}&#8221;</span>/<span class="kw2">&gt;</span></a></span> </div>
</li>
</ol>
</div>
</div>
<p> einen Getter erwartet und folgende Fehlermeldung produziert:</p>
<blockquote><p>
The &#8220;.&#8221; operator was supplied with an index value of type &#8220;java.lang.String&#8221; to be applied to a List or array&#8230;
</p></blockquote>
<p>Die Erstellung einer einfachen Wrapperklasse behebt dieses Problem:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ListWrapper <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AList+java.sun.com&#038;bntl=1"><span class="kw3">List</span></a> list;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> ListWrapper<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">list</span> = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AArrayList+java.sun.com&#038;bntl=1"><span class="kw3">ArrayList</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">int</span> getSize<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> list.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AList+java.sun.com&#038;bntl=1"><span class="kw3">List</span></a> getList<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> list;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die Idee zur Lösung habe ich Buch Core JSTL von David M. Geary gefunden.</p>
<p><a href="http://books.google.de/books?id=ktbRmbLGseoC&#038;lpg=PT107&#038;ots=dzMD8nBtky&#038;dq=The%20%22.%22%20operator%20was%20supplied%20with%20an%20index%20value%20of%20type%20%22java.lang.String%22%20to%20be%20applied%20to%20a%20List%20or%20array&#038;pg=PT107#v=onepage&#038;q=The%20%22.%22%20operator%20was%20supplied%20with%20an%20index%20value%20of%20type%20%22java.lang.String%22%20to%20be%20applied%20to%20a%20List%20or%20array&#038;f=false">Quelle</a></p>
<p>Sollte man functions-Bibliothek &#8220;fn&#8221; nutzen, kann man natürlich die Funktion<br />
<em>fn:length</em> verwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2011/01/06/grose-einer-liste-in-einer-jsp-darstellen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Selenium &amp; TestNG</title>
		<link>http://blog.davidgraesser.de/2010/05/04/selenium-testng/</link>
		<comments>http://blog.davidgraesser.de/2010/05/04/selenium-testng/#comments</comments>
		<pubDate>Tue, 04 May 2010 14:45:58 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=134</guid>
		<description><![CDATA[Hier eine Liste mit Problemen die ich beim ersten Einsatz vom Selenium &#038; TestNG hatte und keine direkte Problemlösung im Netz gefunden habe. Problem 1: Man kann seine TestSuiten in mehrere SubSuiten unterteilen und über mehrere XML-Konfigurationen definieren. Bsp: &#60;?xml version=&#8220;1.0&#8243; encoding=&#8220;UTF-8&#8243;?&#62; &#60;suite name=&#8220;suiten&#8221; verbose=&#8220;10&#8243;&#62; &#160; &#160; &#160; &#160; &#60;suite-files&#62; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Hier eine Liste mit Problemen die ich beim ersten Einsatz vom Selenium &#038; TestNG hatte und keine direkte Problemlösung im Netz gefunden habe.</p>
<p><strong>Problem 1:</strong><br />
Man kann seine TestSuiten in mehrere SubSuiten unterteilen und über mehrere XML-Konfigurationen definieren.<br />
Bsp:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;</span>?xml <span class="re0">version</span>=<span class="st0">&#8220;1.0&#8243;</span> <span class="re0">encoding</span>=<span class="st0">&#8220;UTF-8&#8243;</span>?<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;suite</span> <span class="re0">name</span>=<span class="st0">&#8220;suiten&#8221;</span> <span class="re0">verbose</span>=<span class="st0">&#8220;10&#8243;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-file <span class="re0">path</span>=<span class="st0">&#8220;suiten/myTest1.xml&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-file <span class="re0">path</span>=<span class="st0">&#8220;suiten/myTest2.xml&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/suite<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
<p>Leider kommt es bei diesem Setup zu einer NullPointerException</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>TestNG<span class="br0">&#93;</span> Reporter org.<span class="me1">testng</span>.<span class="me1">reporters</span>.<span class="me1">XMLReporter</span>@be0e27 failed</div>
</li>
<li class="li1">
<div class="de1">java.<span class="me1">lang</span>.<a href="http://www.google.com/search?q=allinurl%3ANullPointerException+java.sun.com&#038;bntl=1"><span class="kw3">NullPointerException</span></a></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; at java.<span class="me1">util</span>.<a href="http://www.google.com/search?q=allinurl%3ACalendar+java.sun.com&#038;bntl=1"><span class="kw3">Calendar</span></a>.<span class="me1">setTime</span><span class="br0">&#40;</span>Unknown Source<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; at java.<span class="me1">text</span>.<a href="http://www.google.com/search?q=allinurl%3ASimpleDateFormat+java.sun.com&#038;bntl=1"><span class="kw3">SimpleDateFormat</span></a>.<span class="me1">format</span><span class="br0">&#40;</span>Unknown Source<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; at java.<span class="me1">text</span>.<a href="http://www.google.com/search?q=allinurl%3ASimpleDateFormat+java.sun.com&#038;bntl=1"><span class="kw3">SimpleDateFormat</span></a>.<span class="me1">format</span><span class="br0">&#40;</span>Unknown Source<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; at java.<span class="me1">text</span>.<a href="http://www.google.com/search?q=allinurl%3ADateFormat+java.sun.com&#038;bntl=1"><span class="kw3">DateFormat</span></a>.<span class="me1">format</span><span class="br0">&#40;</span>Unknown Source<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; at org.<span class="me1">testng</span>.<span class="me1">reporters</span>.<span class="me1">XMLReporter</span>.<span class="me1">addDurationAttributes</span><span class="br0">&#40;</span>XMLReporter.<span class="me1">java</span>:<span class="nu0">144</span><span class="br0">&#41;</span> </div>
</li>
</ol>
</div>
</div>
<p>Scheinbar verlangt TestNG das in jedem Suite-File mind. ein konkreter Test enthalten ist.<br />
Mit diesem Setup hats dann funktioniert:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;</span>?xml <span class="re0">version</span>=<span class="st0">&#8220;1.0&#8243;</span> <span class="re0">encoding</span>=<span class="st0">&#8220;UTF-8&#8243;</span>?<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;suite</span> <span class="re0">name</span>=<span class="st0">&#8220;suiten&#8221;</span> <span class="re0">verbose</span>=<span class="st0">&#8220;10&#8243;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-file <span class="re0">path</span>=<span class="st0">&#8220;suiten/myTest1.xml&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;suite</span>-file <span class="re0">path</span>=<span class="st0">&#8220;suiten/myTest2.xml&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/suite</span>-files<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;test</span> <span class="re0">name</span>=<span class="st0">&#8220;StartStop&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;classes<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;class</span> <span class="re0">name</span>=<span class="st0">&#8220;de.test.java.FakeTest&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/classes<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/test<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/suite<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
<p><strong>Problem 2:</strong><br />
Um den kompletten Inhalt eines HTML-Elementes auszulesen gibt es folgende Möglichkeit:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> tableContent = session<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">&#8220;//form[@id='test']/div/table&#8221;</span><span class="br0">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
<p>Dabei konnte allerdings der XPath durch die SingleQuotes nicht korrekt aufgelöst werden.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">ERROR: Invalid xpath: XPath parse error </div>
</li>
</ol>
</div>
</div>
<p>Mit getText hats dann geklappt:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> tableContent = session<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getText</span><span class="br0">&#40;</span><span class="st0">&#8220;//form[@id='test']/div/table&#8221;</span><span class="br0">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
<p>Im String tableContent sind dann alle sichtbaren Inhalte der Tabelle, durch Whitespaces getrennt, enthalten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2010/05/04/selenium-testng/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JMeter und SSL-Verbindungen</title>
		<link>http://blog.davidgraesser.de/2009/01/12/jmeter-und-ssl-verbindungen/</link>
		<comments>http://blog.davidgraesser.de/2009/01/12/jmeter-und-ssl-verbindungen/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 09:14:46 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jmeter]]></category>
		<category><![CDATA[p12]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[ssl-manager]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=87</guid>
		<description><![CDATA[Für das verteilte Testen von Anwendungen mit JMeter ergibt sich die Problematik das man bei verschlüsselten Verbindungen in den JMeter-Clients bei jedem Start das Zertifikatspasswort eingeben müsste. Um dies zum umgehen kann man einen Keystore generieren und diesen dann in den JMeter-Properties angeben. Den Keystore erzeugt man sich mit keytool, welches mit Java ausgeliefert wird. [...]]]></description>
			<content:encoded><![CDATA[<p>Für das verteilte Testen von Anwendungen mit JMeter ergibt sich die Problematik das man bei verschlüsselten Verbindungen in den JMeter-Clients bei jedem Start das Zertifikatspasswort eingeben müsste. Um dies zum umgehen kann man einen Keystore generieren und diesen dann in den JMeter-Properties angeben.</p>
<p>Den Keystore erzeugt man sich mit keytool, welches mit Java ausgeliefert wird.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">keytool -<span class="co2">importkeystore -deststorepass myPassword -destkeystore myKeystore -srckeystore myZertifikat.p12 -srcstoretype PKCS12 -srcstorepass myPassword </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
</div>
<p><strong>Achtung: Das Passwort für den Keystore muss identisch sein mit dem Passwort des Zertifikates</strong><br />
Die Erzeugung des Keystores mit diesen Parametern funktioniert nur mit Java-6.</p>
<p>in den jmeter.properties müssen folgende angaben gemacht werden:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"># Location of the keystore</div>
</li>
<li class="li1">
<div class="de1">javax.<span class="me1">net</span>.<span class="me1">ssl</span>.<span class="me1">keyStore</span>=C:\\myKeystore</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">#The password to your keystore</div>
</li>
<li class="li1">
<div class="de1">javax.<span class="me1">net</span>.<span class="me1">ssl</span>.<span class="me1">keyStorePassword</span>=myPassword </div>
</li>
</ol>
</div>
</div>
<p>Bei Änderungen in den jmeter.properties muss JMeter neu gestartet werden.</p>
<p>Die Lösung lässt sich natürlich auch für Einzelplatz-Test benutzen. Übrigens wenn man den &#8220;normalen&#8221; Weg über den SSL-Manager geht, nicht wundern das die Zertifikatspasswordabfrage nicht erscheint wenn man das Zertifikat gerade hinzugefügt hat. Die Nachfrage nach diesem Passwort kommt erst wenn man den Test startet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2009/01/12/jmeter-und-ssl-verbindungen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Struts RadioBox-List</title>
		<link>http://blog.davidgraesser.de/2008/04/30/struts-radiobox-list/</link>
		<comments>http://blog.davidgraesser.de/2008/04/30/struts-radiobox-list/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 10:29:28 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[nested struts radiolist radio combo]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=82</guid>
		<description><![CDATA[Um mit Struts eine Liste mit Radioboxen ausgeben zu können, muss man einen kleinen Kniff anwenden um den Value der Radiobox zu setzten: &#60;nested:iterate property=&#8220;myRadioOptions&#8221;&#62; &#60;nested:define id=&#8220;actualRadioValue&#8221; property=&#8220;radioValue&#8221; type=&#8220;java.lang.String&#8221;/&#62; &#60;nested:radio value=&#8216;&#60;%=actualRadioValue%&#62;&#8217; property=&#8220;myRadioList&#8221;/&#62; &#60;/nested:iterate&#62;]]></description>
			<content:encoded><![CDATA[<p>Um mit Struts eine Liste mit Radioboxen ausgeben zu können, muss man einen kleinen Kniff anwenden um den Value der Radiobox zu setzten:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">&lt;nested:iterate property=<span class="st0">&#8220;myRadioOptions&#8221;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;nested:define id=<span class="st0">&#8220;actualRadioValue&#8221;</span> property=<span class="st0">&#8220;radioValue&#8221;</span> type=<span class="st0">&#8220;java.lang.String&#8221;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;nested:radio value=<span class="st0">&#8216;&lt;%=actualRadioValue%&gt;&#8217;</span> property=<span class="st0">&#8220;myRadioList&#8221;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/nested:iterate&gt; </div>
</li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2008/04/30/struts-radiobox-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamischer JSP-Include</title>
		<link>http://blog.davidgraesser.de/2008/04/08/dynamischer-jsp-include/</link>
		<comments>http://blog.davidgraesser.de/2008/04/08/dynamischer-jsp-include/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 12:30:12 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=78</guid>
		<description><![CDATA[&#60;nested:define id=&#8216;actualLink&#8217; property=&#8216;formBean.variable&#8217; type=&#8216;String&#8217;/&#62; &#60;jsp:include flush=&#8220;true&#8221; page=&#8220;&#60;%=&#8221;anmeldung/step&#8220;+actualLink+&#8221;.jsp&#8220;%&#62;&#8221;/&#62;]]></description>
			<content:encoded><![CDATA[<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">&lt;nested:<a href="http://www.php.net/define"><span class="kw3">define</span></a> id=<span class="st0">&#8216;actualLink&#8217;</span> property=<span class="st0">&#8216;formBean.variable&#8217;</span> type=<span class="st0">&#8216;String&#8217;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;jsp:<span class="kw1">include</span> <a href="http://www.php.net/flush"><span class="kw3">flush</span></a>=<span class="st0">&#8220;true&#8221;</span> page=<span class="st0">&#8220;&lt;%=&#8221;</span>anmeldung/step<span class="st0">&#8220;+actualLink+&#8221;</span>.jsp<span class="st0">&#8220;%&gt;&#8221;</span>/&gt; </div>
</li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2008/04/08/dynamischer-jsp-include/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML &gt; DWR &gt; JAVA &gt; JSON &gt; HTML</title>
		<link>http://blog.davidgraesser.de/2007/11/09/html-dwr-java-json-html/</link>
		<comments>http://blog.davidgraesser.de/2007/11/09/html-dwr-java-json-html/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 17:05:28 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=54</guid>
		<description><![CDATA[Um Daten in einer Java-Webanwendung dynamisch nachzuladen bietet sich das AJAX-Framework Direct Web Remoting [DWR] an. Mit diesem ist es möglich Java Methoden aus JavaScript aus aufzurufen und die Ergebnismenge zu empfangen. Da JavaScript mit den Objektstrukturen von Java nichts anfangen kann, müssen die Daten zuvor in JSON-Strings verpackt werden. An einem praktischem Beispiel soll [...]]]></description>
			<content:encoded><![CDATA[<p>Um Daten in einer Java-Webanwendung dynamisch nachzuladen bietet sich das AJAX-Framework <a href="http://getahead.org/dwr">Direct Web Remoting [DWR]</a> an. Mit diesem ist es möglich Java Methoden aus JavaScript aus aufzurufen und die Ergebnismenge zu empfangen. Da JavaScript mit den Objektstrukturen von Java nichts anfangen kann, müssen die Daten zuvor in JSON-Strings verpackt werden.<br />
<span id="more-54"></span><br />
An einem praktischem Beispiel soll dies gezeigt werden. Wir haben 2 Dropdown-Boxen die in Abhängigkeit zueinander stehen. In der oberen Dropdownbox wählt man einen Zyklus (Täglich,Wöchentlich,Monatlich) aus und die unterer Dropdownbox soll ihre Inhalte entsprechend anpassen.<br />
<img src='http://blog.davidgraesser.de/wp-content/uploads/2007/11/doubledropdown.png' alt='doubledropdown.png' /><br />
Als erstes werden die benötigten Javaklassen erzeugt.<br />
Da es sich im Optionsfelder handelt, gibt es eine Basisklasse mit dem Name OptionElement. Diese Klasse hat alle Attribute die auch das Option-Element in HTML hat. Zusätzlich kommt noch das Attribut <em>order</em> hinzu, welches die Reihenfolge innerhalb des Select-Elementes repräsentiert. Da bei der Serialisierung (Java->JSON), die Objektreihenfolge verworfen wird.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> OptionElement <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">int</span> order;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> name;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">boolean</span> disabled;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">boolean</span> selected;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> OptionElement<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">selected</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">disabled</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>von dieser Klasse erben die 2 folgenden Klassen:<br />
Die Klasse Zyklus entspricht der 1.Dropdownbox und hat als &#8220;Kindelemente&#8221; alle zugehörigen Elemente der 2.Dropdownbox.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> Zyklus <span class="kw2">extends</span> OptionElement <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Collection&lt;ZyklusDetails&gt; zyklusDetailsList;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> Zyklus<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">zyklusDetailsList</span> = <span class="kw2">new</span> ArrayList&lt;ZyklusDetails&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die Klasse Zyklusdetails enspricht der 2.Dropdownbox</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ZyklusDetails <span class="kw2">extends</span> OptionElement <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> ZyklusDetails<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Nach dem eine konkrete Ausprägung der Zyklen erstellt wurde, werden diese in ein JSON-Objekt transferiert. Hierbei kommt die klassische <a href="http://www.json.org/java/index.html">JSON-Bibliothek</a> zum Einsatz gekommen. Es gibt auch Alternativen, wie zum Beispiel <a href="http://flexjson.sourceforge.net/">FLEXJSON</a>, welches &#8220;automatisch&#8221; Objektreferenzen auflöst und serialisiert. Dies muss bei dieser Bibliothek händisch gelöst werden.</p>
<p>Wir haben natürlich mehrere Zyklusobjekte, die in einem Array gesammelt wurden. Dieses Array wird jetzt durchlaufen und in JSON-Objekte serialisert.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> JSONObject convertZyklenToJSON<span class="br0">&#40;</span>Zyklen zyklen<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject zyklenJSON = <span class="kw2">new</span> JSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Zyklus z : zyklen.<span class="me1">getZyklusList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject zyklus = <span class="kw2">new</span> JSONObject<span class="br0">&#40;</span>z<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>ZyklusDetails zd : z.<span class="me1">getZyklusDetailsList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklus.<span class="me1">put</span><span class="br0">&#40;</span>zd.<span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="kw2">new</span> JSONObject<span class="br0">&#40;</span>zd<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklenJSON.<span class="me1">put</span><span class="br0">&#40;</span>z.<span class="me1">getId</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, zyklus<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> zyklenJSON;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Anschließend werden die JSON-Objekte in ein JSON-String verpackt und an die aufrufende JavaScript-Funktion zurück gesendet.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> getZyklus<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; JSONObject data = <span class="kw2">new</span> JSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; data.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&#8220;Zyklen&#8221;</span>, convertZyklenToJSON<span class="br0">&#40;</span>getZyklen<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; data.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&#8220;Format&#8221;</span>,&nbsp; convertFormatToJSON<span class="br0">&#40;</span>getFormat<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw2">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> data.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Zusätzlich wird an dieser Stelle noch eine weitere Funktion (<em>convertFormatToJSON</em>) aufgerufen. Dies soll einfach nur zeigen das x-beliebig viele JSON-Objekte in ein JSON-String gepackt werden können und diese auch später wieder leicht auf der JavaScript-Seite aufgelöst werden können.<br />
Folgende JavaScriptFunktion empfängt den JSON-String und schreibt die Objekte, je nach Objekttyp (Zyklus oder Format) in seperate Arrays, um diese im Anschluss weiterzuverarbeiten.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">getZyklusData: <span class="kw2">function</span> <span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//BerichtAboAccess.getZyklus(2, function(data) {</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklusDataDB = <span class="kw2">new</span> <span class="kw2">Function</span><span class="br0">&#40;</span><span class="st0">&#8220;return &#8220;</span> + data<span class="br0">&#41;</span><span class="br0">&#40;</span>&nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> prop <span class="kw1">in</span> zyklusDataDB<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> propDetail <span class="kw1">in</span> zyklusDataDB<span class="br0">&#91;</span>prop<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> className = zyklusDataDB<span class="br0">&#91;</span>prop<span class="br0">&#93;</span><span class="br0">&#91;</span>propDetail<span class="br0">&#93;</span>.<span class="kw2">class</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>className.<span class="me1">substring</span><span class="br0">&#40;</span>className.<span class="me1">lastIndexOf</span><span class="br0">&#40;</span><span class="st0">&#8216;$&#8217;</span><span class="br0">&#41;</span>+<span class="nu0">1</span>,className.<span class="me1">length</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8220;Format&#8221;</span>: formatData.<span class="me1">push</span><span class="br0">&#40;</span>zyklusDataDB<span class="br0">&#91;</span>prop<span class="br0">&#93;</span><span class="br0">&#91;</span>propDetail<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8220;Zyklus&#8221;</span>:&nbsp; zyklusData.<span class="me1">push</span><span class="br0">&#40;</span>zyklusDataDB<span class="br0">&#91;</span>prop<span class="br0">&#93;</span><span class="br0">&#91;</span>propDetail<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatData.<span class="me1">sort</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">Keysort</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">sortZyklusArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">initialisiereZyklusChooser</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">initialisiereFormatChooser</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die beiden Arrays <em>formatData </em>und <em>zyklusData </em>wurden außerhalb der Funktion, als globale Variablen angelegt.<br />
Da bei der Serialisierung die Reihenfolge der Objekte komplett verworfen wurde, werden in der Funktion <em>sortZyklusArray</em>, die Elemente nach dem Attribute <em>order </em>sortiert. Dafür wurde die Standard <em>Keysort</em>-Methode überschrieben:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">Keysort: <span class="kw2">function</span>&nbsp; <span class="br0">&#40;</span>a, b<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>a.<span class="me1">order</span>&lt;b.<span class="me1">order</span><span class="br0">&#41;</span> <span class="kw1">return</span> -<span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>a.<span class="me1">order</span>&gt;b.<span class="me1">order</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die folgende Methode durchläuft das Zyklusarray und nutzt die überschriebende Keysort-Methode zum sortieren:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">sortZyklusArray: <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklusData.<span class="me1">sort</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">Keysort</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i &lt; zyklusData.<span class="me1">length</span>; ++i<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> zyklusDetails = <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>j <span class="kw1">in</span> zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">id</span>&nbsp; != undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklusDetails.<span class="me1">push</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklusDetails.<span class="me1">sort</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">Keysort</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>k <span class="kw1">in</span> zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">id</span> != undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span> = zyklusDetails<span class="br0">&#91;</span>count<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die folgende Methode, erzeugt die Optionsfelder in den Select-Elementen und setzt dabei auch die Attribute <em>selected </em>oder <em>disabled</em>:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">initialisiereZyklusChooser:&nbsp; &nbsp; &nbsp; <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> selectedZyklus = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i &lt; zyklusData.<span class="me1">length</span>; ++i<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> objOption = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#8220;OPTION&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">text</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">value</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">disabled</span> == <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; objOption.<span class="me1">disabled</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">selected</span> == <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; objOption.<span class="me1">selected</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DWRUtil.<span class="me1">removeAllOptions</span><span class="br0">&#40;</span>detailsChooser<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectedZyklus = zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;zyklusChooser.<span class="me1">options</span>.<span class="me1">add</span><span class="br0">&#40;</span>objOption<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> j <span class="kw1">in</span> zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="co1">//Standardmäßig ist Täglich ausgewählt</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">id</span> != undefined<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>selectedZyklus == <span class="nu0">0</span> &amp;&amp; zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">id</span> == <span class="st0">&#8220;z1&#8243;</span><span class="br0">&#41;</span> | <span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">id</span> == selectedZyklus<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> objOption = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#8220;OPTION&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">text</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">value</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">disabled</span> == <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objOption.<span class="me1">disabled</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">selected</span> == <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objOption.<span class="me1">selected</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;detailsChooser.<span class="me1">options</span>.<span class="me1">add</span><span class="br0">&#40;</span>objOption<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">toogleChooser</span><span class="br0">&#40;</span>zyklusChooser<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">toogleChooser</span><span class="br0">&#40;</span>detailsChooser<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Wenn ein Select-Element nur ein Attribut hat, setzt die Methode toogleChooser, dieses Element auf disabled, da eh keine weiteren Elemente zur Auswahl stehen.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">toogleChooser: <span class="kw2">function</span> <span class="br0">&#40;</span>chooser<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>chooser.<span class="me1">options</span>.<span class="me1">length</span> == <span class="nu0">1</span><span class="br0">&#41;</span> chooser.<span class="me1">disabled</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> chooser.<span class="me1">disabled</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die folgende Methode wird aufgerufen, wenn das onChange-Event in der ersten Dropdownbox ausgelöst wird:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">onChangeZyklus: <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i &lt; zyklusData.<span class="me1">length</span>; ++i<span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">id</span> == $F<span class="br0">&#40;</span>zyklusChooser<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; DWRUtil.<span class="me1">removeAllOptions</span><span class="br0">&#40;</span>detailsChooser<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> j <span class="kw1">in</span> zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">id</span> != undefined<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> objOption = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#8220;OPTION&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">text</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;objOption.<span class="me1">value</span>= zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>zyklusData<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">disabled</span> == <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objOption.<span class="me1">disabled</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;detailsChooser.<span class="me1">options</span>.<span class="me1">add</span><span class="br0">&#40;</span>objOption<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="kw1">this</span>.<span class="me1">toggleDetailsSelectStatus</span><span class="br0">&#40;</span><span class="st0">&#8220;detailsChooser&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Die Methode xxx ist nur eine Spielerei und verfärbt kurz die untere Dropdownbox, um die Veränderung zu verdeutlichen.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">toggleDetailsSelectStatus: <span class="kw2">function</span> <span class="br0">&#40;</span>selectField<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> Effect.<span class="me1">Highlight</span><span class="br0">&#40;</span>selectField, <span class="br0">&#123;</span>startcolor:<span class="st0">&#8216;#FEF6DC&#8217;</span>, endcolor:<span class="st0">&#8216;#FFFFFF&#8217;</span>, duration:<span class="nu0">1</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">toogleChooser</span><span class="br0">&#40;</span>detailsChooser<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Dazu wurde <a href="http://wiki.script.aculo.us/scriptaculous/show/Effect.Highlight">folgende Funktion</a> aus der script.aculo.us-Bibliothek verwendet.</p>
<p>urls:<br />
<a href="http://pragprog.com/titles/cppsu">http://pragprog.com/titles/cppsu</a><br />
<a href="http://scripteka.com/">http://scripteka.com/</a><br />
<a href="http://prototype-graphic.xilinus.com/">http://prototype-graphic.xilinus.com/</a><br />
<a href="http://blog.xilinus.com/2007/11/4/prototype-ui-beta-version-pwc-reloaded">http://blog.xilinus.com/2007/11/4/prototype-ui-beta-version-pwc-reloaded</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2007/11/09/html-dwr-java-json-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts &amp; Spring</title>
		<link>http://blog.davidgraesser.de/2007/11/09/struts-spring/</link>
		<comments>http://blog.davidgraesser.de/2007/11/09/struts-spring/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 15:34:21 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.davidgraesser.de/?p=50</guid>
		<description><![CDATA[Kurzanleitung um eine Seite mit Struts und Spring zu erstellen. Ziel ist es eine URL foo.do aufzulösen und eine JSP aufzurufen, wobei die Inhalte der JSP über eine extra Transformationsklasse populiert werden sollen. Zusätzlich soll ein URL-Parameter ausgewertet werden. Hierbei handelt es sich um eine spezifische Beschreibung einer bestehenden Ausgangskonfiguration und ist nicht allgemein anwendbar. [...]]]></description>
			<content:encoded><![CDATA[<p>Kurzanleitung um eine Seite mit Struts und Spring zu erstellen.<br />
Ziel ist es eine URL foo.do aufzulösen und eine JSP aufzurufen, wobei die Inhalte der JSP über eine extra Transformationsklasse populiert werden sollen. Zusätzlich soll ein URL-Parameter ausgewertet werden. Hierbei handelt es sich um eine spezifische Beschreibung einer bestehenden Ausgangskonfiguration und ist nicht allgemein anwendbar.<br />
<span id="more-50"></span></p>
<p>Die Testseite liegt in einem Unterverzeichnis des webapp/tpl-Verzeichnisses: webapp/tpl/reports/berichtsAbo.jsp</p>
<p>Auf einer x-beliebigen Seite wird der Link eingefügt:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html</span></a>:<span class="kw3">link</span> page=<span class="st0">&#8220;/reports/abo.do?status=new&#8221;</span><span class="kw2">&gt;</span></a></span>Link<span class="sc2"><span class="kw2">&lt;/html</span>:link&gt;</span> </div>
</li>
</ol>
</div>
</div>
<p>In der Datei <strong>struts-action.xml</strong> wird die URL aufgelöst und eine Actionklasse zugewiesen:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">name</span>=<span class="st0">&#8220;/reports/abo&#8221;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&#8220;packageX.ReportsAboAction&#8221;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="re0">parent</span>=<span class="st0">&#8220;displayOnlyAction&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">&#8220;transformationRegistry&#8221;</span> <span class="re0">ref</span>=<span class="st0">&#8220;transformationRegistry&#8221;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
<p>Die Klasse TransformationRegistry wird in der ReportsAboAction benötigt und wird zur Laufzeit via Dependency Injection zugeordnet. Zusätzlich erbt die Klasse von DipsplayOnlyAction.</p>
<p>Der <strong>Formdeskriptor ReportsAbo </strong>zur Action sieht wie folgt aus:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">:extends de.sci.commons.web.struts.PersistableForm</div>
</li>
<li class="li1">
<div class="de1">emailadresse &quot;Email-Adresse&quot; email</div>
</li>
<li class="li1">
<div class="de1">status &quot;Status&quot; opt </div>
</li>
</ol>
</div>
</div>
<p>Daraus wird eine Formbeanklasse <strong>ReportsAboForm </strong>erzeugt, welche Getter/Setter Methoden für die Attribute bereitstellt.</p>
<p>In der Klasse <strong>ReportsAboAction.java</strong> wird zunächst die Form angegeben die verwendet werden und die ein Pfad zur JSP Datei der via Tiles aufgelöst wird:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * Reports Abo Action.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * @struts.action path = &quot;/reports/abo&quot; name = &quot;reportsAboForm&quot; scope = &quot;session&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * @struts.action-forward name = &quot;show&quot; path = &quot;reports.abo&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> */</span> </div>
</li>
</ol>
</div>
</div>
<p>In der Datei <strong>tiles-defs.xml</strong> wird der Pfad aufgelöst und einer konkreten JSP-Datei zugewiesen:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;definition</span> <span class="re0">name</span>=<span class="st0">&#8220;reports.abo&#8221;</span> <span class="re0">extends</span>=<span class="st0">&#8220;main&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;put</span> <span class="re0">name</span>=<span class="st0">&#8220;title&#8221;</span> <span class="re0">value</span>=<span class="st0">&#8220;Bericht abonnieren&#8221;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;put</span> <span class="re0">name</span>=<span class="st0">&#8220;body&#8221;</span> <span class="re0">value</span>=<span class="st0">&#8220;/tpl/reports/berichtAbo.jsp&#8221;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/definition<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
<p>Die Transformationsklasse ReportsAboTF soll Werte in die Formbean schreiben und lesen. In der Datei <strong>transformation.xml</strong> werden die Transformationsklassen angegeben und über eine TransformationRegistry registriert.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">&#8220;reportsAboTF&#8221;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">class</span>=<span class="st0">&#8220;transformation.ReportsAboTF&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">&#8220;transformationRegistry&#8221;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">class</span>=<span class="st0">&#8220;transformation.TransformationRegistry&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">&#8220;transformations&#8221;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;set<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">local</span>=<span class="st0">&#8220;reportsAboTF&#8221;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/set<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
<p>Im Konstruktor der Transformationsklasse ReportsAboTF werden sowohl die Formbean-Klasse als auch die Domainklasse angegeben:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> ReportsAboTF<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setDomainObjectClass<span class="br0">&#40;</span>ReportsAbo.<span class="kw2">class</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setFormBeanClass<span class="br0">&#40;</span>ReportsAboForm.<span class="kw2">class</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Diese Klasse hat eine Methode populateFormBean in der die Domainobjektattribute in die Formbeanattribute geschrieben werden:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> populateFormBean<span class="br0">&#40;</span>BaseForm formBean, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> domainObject,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TransformationContext context<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReportsAbo rAbo = <span class="br0">&#40;</span>ReportsAbo<span class="br0">&#41;</span> domainObject;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReportsAboForm reportsAboForm = <span class="br0">&#40;</span>ReportsAboForm<span class="br0">&#41;</span> formBean;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; reportsAboForm.<span class="me1">setEmailadresse</span><span class="br0">&#40;</span>rAbo.<span class="me1">getEmail</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>In der ReportsAboAction wird zunächst die passende Transformationsklasse aus der TransformationRegistry geholt</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">protected</span> Transformation getTransformation<span class="br0">&#40;</span>HttpServletRequest request<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">new</span> TransformationWrapper<span class="br0">&#40;</span>transformationRegistry.<span class="me1">getTransformation</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReportsAbo.<span class="kw2">class</span>, ReportsAboForm.<span class="kw2">class</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Über dieses Objekt kann dann die populateFormBean-Methode aufgerufen werden.<br />
Der Ablauf in der Actionklasse ist folgender Maßen. Standardmäßig wird die excute-Mehtode aufgerufen:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> ActionForward execute<span class="br0">&#40;</span>ActionMapping mapping, ActionForm form,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpServletRequest request, HttpServletResponse response<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReportsAboForm reportsAboForm = <span class="br0">&#40;</span>ReportsAboForm<span class="br0">&#41;</span> form;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> typeName = getParameter<span class="br0">&#40;</span>request, PARAM_STATUS<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>typeName != <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type type = Type.<span class="me1">valueOf</span><span class="br0">&#40;</span>typeName.<span class="me1">toUpperCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>type<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="kw2">NEW</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initForm<span class="br0">&#40;</span>request, reportsAboForm<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&#8230; </div>
</li>
</ol>
</div>
</div>
<p>In der Methode initForm wird Formbean zurückgesetzt und ein neues Domainobjekt erzeugt:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">protected</span> <span class="kw4">void</span> initForm<span class="br0">&#40;</span>HttpServletRequest request, BaseForm baseForm<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReportsAboForm form = <span class="br0">&#40;</span>ReportsAboForm<span class="br0">&#41;</span> baseForm;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; form.<span class="me1">reset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReportsAbo rAbo = <span class="kw2">new</span> ReportsAbo<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; form.<span class="me1">setStatus</span><span class="br0">&#40;</span><span class="st0">&#8220;NEW&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; form.<span class="me1">setPropertyPathAccess</span><span class="br0">&#40;</span><span class="kw2">new</span> EmptyPropertyPathAccess<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ActionContext.<span class="me1">resetSessionAttributes</span><span class="br0">&#40;</span><span class="kw2">this</span>, request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; populateWithDeletion<span class="br0">&#40;</span>request, form, rAbo, <span class="kw2">null</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>In der Methode populateWithDeletion wird die populateFormBean-Methode der Transformationsklasse aufgerufen:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">protected</span> <span class="kw4">void</span> populateWithDeletion<span class="br0">&#40;</span>HttpServletRequest request, BaseForm baseForm,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> domainObject, StatePreserve statePreserve<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Transformation tf = getTransformation<span class="br0">&#40;</span>request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tf.<span class="me1">populateFormBean</span><span class="br0">&#40;</span>baseForm, <span class="br0">&#40;</span>IPersistentCapable<span class="br0">&#41;</span> domainObject,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> TransformationContext<span class="br0">&#40;</span>request, <span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>In der zugehörigen JSP Seite wird die Formbean in einer Variable gesetzt:</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">&lt;c:set <span class="kw2">var</span>=<span class="st0">&#8220;item&#8221;</span> value=<span class="st0">&#8220;${reportsAboForm}&#8221;</span> /&gt; </div>
</li>
</ol>
</div>
</div>
<p>Über</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">&lt;c:out value=<span class="st0">&#8220;${item.emailadresse}&#8221;</span>/&gt; </div>
</li>
</ol>
</div>
</div>
<p>Kann man auf den Wert zugreifen der in der Formbean gesetzt ist.</p>
<p><a href='http://blog.davidgraesser.de/wp-content/uploads/2007/11/basisaufbau.png' rel="lightbox[50]" title='Strukturdiagramm'><img src='http://blog.davidgraesser.de/wp-content/uploads/2007/11/basisaufbau.thumbnail.png' alt='Strukturdiagramm' /></a></p>
<p>Links:<br />
<a href="http://www.oio.de/jstl-reference.htm">JSP-Tag-Reference</a><br />
<a href="http://www.laliluna.de/assets/tutorials/first_steps_with_struts_de.pdf">Gute Struts-Einführung</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.davidgraesser.de/2007/11/09/struts-spring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

