<?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>javathreads.de &#187; JSF</title>
	<atom:link href="http://javathreads.de/tag/jsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://javathreads.de</link>
	<description>Blog rund um Java und Web Entwicklung</description>
	<lastBuildDate>Wed, 02 Nov 2011 10:37:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>11 Tipper &#8211; kostenloses Fu&#223;ball Tippspiel mit JSF und JBoss Seam auf Tomcat Basis geht online</title>
		<link>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/</link>
		<comments>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/#comments</comments>
		<pubDate>Sun, 02 May 2010 13:25:01 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[JBoss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2415</guid>
		<description><![CDATA[M&#246;chte man ein Framework besser kennenlernen oder bestimmte Problemstellungen nachstellen um brauchbare L&#246;sung zu finden bietet es sich an dieses an einem kleinen Projekt mit einem Ziel zu tun. Hat man sich erst einmal ein Projekt ausgedacht und das voller Elan angefangen besteht die gro&#223;e Herausforderung es auch zu einem halbwegs vern&#252;nftigen Abschluss zu bringen. [...]]]></description>
			<content:encoded><![CDATA[<p>M&#246;chte man ein Framework besser kennenlernen oder bestimmte Problemstellungen nachstellen um brauchbare L&#246;sung zu finden bietet es sich an dieses an einem kleinen Projekt mit einem Ziel zu tun. Hat man sich erst einmal ein Projekt ausgedacht und das voller Elan angefangen besteht die gro&#223;e Herausforderung es auch zu einem halbwegs vern&#252;nftigen Abschluss zu bringen. Genau das ist in diesen Tagen bei mir passiert und ich pr&#228;sentiere p&#252;nktlich zur WM 2010 das<a href="http://11tipper.de/tippspiel"> kostenlose Fu&#223;ball Tippspiel 11 Tipper</a>. </p>
<div class="singleImgDiv">
<a href="http://11tipper.de/tippspiel"><img src="http://javathreads.de/data/uploads/2010/05/11TipperTippspiel.jpg" alt="" title="11 Tipper Tippspiel" width="610" height="354" class="alignnone size-full wp-image-2436" /></a>
</div>
<p>Wer also ein Tippspiel zur WM oder zur Bundesliga mit Freunden oder Arbeitskollegen veranstalten m&#246;chte kann sich auf 11tipper.de eines einrichten.<br />
Wer mehr &#252;ber das Tippspiel an sich wissen m&#246;chte sollte den <a href="http://webthreads.de/2010/05/11-tipper-das-kostenlose-tippspiel-zur-wm-2010-oder-bundesliga-geht-online/">Artikel auf webthreads.de</a> lesen oder sich die Features auf <a href="http://11tipper.de/tippspiel">11 Tipper</a> direkt ansehen. Es bestehen auch <a href="http://11tipper.de/tippspiel/demo">zwei Demo Tipprunden</a> in denen man als Spielleiter oder Tipper herumklicken kann.</p>
<h4>Verwendete Frameworks</h4>
<p>Jetzt noch ein paar Worte zur Technik. Das Tippspiel wird mit <strong>JSF 1.2</strong> und <strong>JBoss Seam 2.2.0</strong> entwickelt. Viele kennen JBoss Seam nur auf einem Application Server wie eben den JBoss AS. Ich habe Seam auf einem <strong>Tomcat 6</strong> ohne Embedded JBoss verwendet. Es wird somit anstatt auf EJBs voll auf <strong>POJOs</strong> gesetzt und auch nicht so getan als w&#228;re mann auf einem Application Server. Die Persistenz ist mit <strong>JPA (Hibernate)</strong> umgesetzt. Seam verwendet zur Validierung der Eingaben an der Oberfl&#228;che die JPA Annotationen an den Entities. F&#252;r Timer und zeitliche Verz&#246;gerungen wird <strong>Quarz</strong> verwendet. Das Frontend ist mit <strong>Facelets</strong> und <strong>JBoss RichFaces 3.3</strong> umgesetzt. Verfeinert wird das Ganze mit viel <strong>Ajax</strong> und <strong>jQuery 1.4</strong> als JavaScript Bibliothek.</p>
<p>In der Vergangenheit sind schon ein paar Artikel aus den Erkenntnissen dieses Projekts hier auf javathreads.de ver&#246;ffentlicht worden. Und ich werde wohl noch das ein oder andere Tutorial dazu hier in naher Zukunft ver&#246;ffentlichen. Falls jemand eine bestimmte Frage zur Umsetzung hat dann nur raus damit ich antworte garantiert =).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Model View Controller in JSF &#8211; wo und was ist der Controller?</title>
		<link>http://javathreads.de/2009/10/model-view-controller-in-jsf-wo-und-was-ist-der-controller/</link>
		<comments>http://javathreads.de/2009/10/model-view-controller-in-jsf-wo-und-was-ist-der-controller/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 07:25:05 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Seam]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2122</guid>
		<description><![CDATA[Das Model View Controller (MVC) Pattern ist wohl eines der bekanntesten Architekturmuster. So ziemlich jeder Informatiker muss sich damit auseinandersetzen und nicht selten ist es f&#252;r Berufsanf&#228;nger auch eine Frage im Bewerbungsgespr&#228;ch. Unterh&#228;lt man sich mit verschiedensten, auch schon sehr erfahrenen, Leuten dar&#252;ber ist es dennoch erstaunlich wie viele unterschiedliche Auslegungen es dazu gibt.
Vor allem [...]]]></description>
			<content:encoded><![CDATA[<p>Das <strong>Model View Controller</strong> (MVC) Pattern ist wohl eines der bekanntesten Architekturmuster. So ziemlich jeder Informatiker muss sich damit auseinandersetzen und nicht selten ist es f&#252;r Berufsanf&#228;nger auch eine Frage im Bewerbungsgespr&#228;ch. Unterh&#228;lt man sich mit verschiedensten, auch schon sehr erfahrenen, Leuten dar&#252;ber ist es dennoch erstaunlich wie viele unterschiedliche Auslegungen es dazu gibt.</p>
<p>Vor allem bei der Frage was denn der Controller, gerade bei Web-Frameworks, sei gehen die Meinungen oft auseinander. W&#228;hrend man z.b. FAT Client Anwendungen den Controller oft direkt als erstes schreibt und diesen dadurch sehr genau bestimmen kann gehen die Meinungen was denn der Controller in JSF Anwendungen ist deutlich auseinander. F&#252;r JSF Anwendungen geht z.B. unter anderem die Meinung um, dass die Managed Bean (oder bei Verwendung von Seam eine Seam Action / Spring eine Spring Bean) der Controller ist. Auch die Aussage, dass die JSP/JSF/XHTML Seite oder der Browser der Controller ist (denn der Controller nimmt laut Definition die Eingaben entgegen und leitet sie weiter) waren darunter.</p>
<p>Nun bin ich bei Recherchen zu Seam &#252;ber eine <a href="http://www.slideshare.net/yuvalb/jsf-and-seam">Pr&#228;sentation von Roi Aldaag</a> gestolpert und habe dabei folgende, meiner Meinung nach wirklich passende, MVC Beschreibung f&#252;r JSF gesehen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/10/MVCJSF.jpg" alt="Model View Controller in JSF" title="MVC in JSF" width="630" height="608" class="alignnone size-full wp-image-2131" />
</div>
<p>Man sieht darin, dass der Controller in einer JSF Anwendung aus mehreren Teilen besteht. Zum einen das <code>FacesServlet</code>, welches jeden Request entgegennimmt und initial verarbeitet. Je nach Situation wird anschlie&#223;end die <code>faces-config.xml</code> verwendet um an das Model weiterzuleiten oder die in JSF m&#246;glichen Event Listener oder Action Handler aufgerufen.</p>
<p>Somit besteht der <strong>Controller</strong> aus drei Teilen:</p>
<ul>
<li>Front-Servlet (<code>FacesServlet</code>)</li>
<li>Konfiguration (<code>faces-config.xml</code> oder <code>pages.xml</code> in Seam Anwendungen)</li>
<li>Event Listener (z.B. ValueChangeListener)</li>
<li>Action Event (ausgel&#246;st durch <code>h:commandButton</code> und <code>h:commandLink</code> Actions)</li>
</ul>
<p>Gerade das in JSF vorhandene Event Modell sowie die Action Events bringen JSF noch viel n&#228;her an das MVC Pattern als die bisherigen Web-Frameworks. </p>
<p>Nur der Vollst&#228;ndigkeit halber im folgenden noch eine kurze Erl&#228;uterung zu den Teilen Model und View:<br />
Die <strong>View</strong> in einer JSF Anwendung beinhaltet:</p>
<ul>
<li>Component Tree (JSF Komponentenbaum)</li>
<li>Component Model (Java Beans als Unterst&#252;tzung f&#252;r Komponenten)</li>
<li>Delegates (Konverter, Validator oder Renderer)</li>
<li>Resources (JSP, XML, Properties)</li>
</ul>
<p>Das <strong>Model</strong> im MVC ist nicht ausschlie&#223;lich das Domain Model oder Entity Modell gemeint. Mit Modell meint man die komplette Business Logik in einer Anwendung:</p>
<ul>
<li>Pojos (bei Plain JSF / Seam Pojo Anwendung)</li>
<li>EJB, Entity Beans (bei einer JEE Anwendung)</li>
</ul>
<p>Der Screenshot der MVC Umsetzung in einer JSF Anwendung ist aus der folgenden Pr&#228;sentation mit dem Titel &#8220;JSF and Seam&#8221;:</p>
<div style="text-align:center">
<object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsfseam-1216326203414524-8&#038;stripped_title=jsf-and-seam" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsfseam-1216326203414524-8&#038;stripped_title=jsf-and-seam" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
</div>
<p><br/><br />
Obwohl das Thema wohl wirklich ein alter Hut ist und der ein oder andere es wohl schon zum xten mal durchgekaut hat fand ich es wichtig MVC im Rahmen von JSF noch einmal aufzuzeigen ohne direkte Widerrede zu erhalten ;). In Meetings und pers&#246;nlichen Diskussionen dar&#252;ber brechen wir meistens ab da man sich doch nicht einigen kann, die Meinungen weit auseinander gehen und die Gem&#252;ter am Ende sehr erhitzt sind. Also falls jemand eine erg&#228;nzende oder gar total andere Meinung zu MVC hat darf er sich in den Kommentaren auslassen &#8211; es wird nichts zensiert ;).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/10/model-view-controller-in-jsf-wo-und-was-ist-der-controller/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>JSF 2.0 A complete tour &#8211; Sun Mediacast mit Ed Burns</title>
		<link>http://javathreads.de/2009/07/jsf-2-0-a-complete-tour-sun-mediacast-mit-ed-burns/</link>
		<comments>http://javathreads.de/2009/07/jsf-2-0-a-complete-tour-sun-mediacast-mit-ed-burns/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 18:00:06 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSF 2.0]]></category>
		<category><![CDATA[Präsentation]]></category>
		<category><![CDATA[Webinar]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1895</guid>
		<description><![CDATA[Ich hatte schon im Mai auf ein Webinar mit Ed Burns &#252;ber das Thema JSf 2.0 hingewiesen. Die Pr&#228;sentation konnte man sich herunterladen und nun habe ich den Mitschnitt dieses Webinars auf mediacast.sun.com gefunden:

Die komplette Pr&#228;sentation dauert ungef&#228;hr eine Stunde.
]]></description>
			<content:encoded><![CDATA[<p>Ich hatte schon im Mai auf ein Webinar mit Ed Burns &#252;ber das Thema JSf 2.0 <a href="http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/">hingewiesen</a>. Die Pr&#228;sentation konnte man sich <a href="https://javaserverfaces.dev.java.net/presentations/jsf2-complete-tour/jsf2-complete-tour.pdf">herunterladen</a> und nun habe ich den Mitschnitt dieses Webinars auf <a href="http://mediacast.sun.com/users/edburns00/media/jsf2-tour-webinar.html">mediacast.sun.com</a> gefunden:</p>
<p><a href="http://mediacast.sun.com/users/edburns00/media/jsf2-tour-webinar.html"><img src="http://javathreads.de/data/uploads/2009/07/SunMediacastJsf20EdBurns.jpg" alt="Sun Mediacast Js f2.0 Ed Burns" title="Sun Mediacast Js f2.0 Ed Burns" width="620" height="447" class="alignnone size-full wp-image-1896" /></a></p>
<p>Die komplette Pr&#228;sentation dauert ungef&#228;hr eine Stunde.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/07/jsf-2-0-a-complete-tour-sun-mediacast-mit-ed-burns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eigene Texte bei Validierung und Konvertierung in JSF 1.2</title>
		<link>http://javathreads.de/2009/07/eigene-texte-bei-validierung-und-konvertierung-in-jsf-12/</link>
		<comments>http://javathreads.de/2009/07/eigene-texte-bei-validierung-und-konvertierung-in-jsf-12/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 06:00:07 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Converter]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSF 1.2]]></category>
		<category><![CDATA[Resource Bundle]]></category>
		<category><![CDATA[Validator]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1834</guid>
		<description><![CDATA[JSF bringt f&#252;r die Eingabe und Konvertierung von Daten schon ein paar Fehlermeldungen mit.
So erscheint z.B. bei einem h:inputText Element bei dem das Attribut requrired="true" gesetzt ist die Meldung &#8220;Validation Error: Value is required.&#8220;. Entwickelt man eine Anwendung mit deutschem Frontend sollte dieser Text dann allerdings auch auf Deutsch dargestellt werden. Gl&#252;cklicherweise bringt die JSF [...]]]></description>
			<content:encoded><![CDATA[<p>JSF bringt f&#252;r die Eingabe und Konvertierung von Daten schon ein paar Fehlermeldungen mit.</p>
<p>So erscheint z.B. bei einem <code>h:inputText</code> Element bei dem das Attribut <code>requrired="true"</code> gesetzt ist die Meldung &#8220;<code>Validation Error: Value is required.</code>&#8220;. Entwickelt man eine Anwendung mit deutschem Frontend sollte dieser Text dann allerdings auch auf Deutsch dargestellt werden. Gl&#252;cklicherweise bringt die JSF 1.2 Implementierung von Sun auch gleich ein deutsches Resource Bundle mit und der Ausgabetext hei&#223;t dann &#8220;<code>Validierungs-Fehler: Wert wird ben&#246;tigt.</code>&#8220;.</p>
<p>Um eine Meldung zu erhalten muss der JSF Code wie folgt aussehen:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:inputText </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;myInputField&quot;</span><span style="color: #FF0000; "> value</span><span style="color: #0000FF; ">=&quot;#{myBean.myStringAttribute}&quot;</span><span style="color: #FF0000; "> required</span><span style="color: #0000FF; ">=&quot;true&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:message </span><span style="color: #FF0000; ">for</span><span style="color: #0000FF; ">=&quot;myInputField&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
</div>
<p>Siehe auch in der <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/">JSF 1.2 Tag Library Documentation</a> f&#252;r <code><a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/h/inputText.html">h:inputText</a></code> und <code><a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/h/message.html">h:message</a></code>.</p>
<p>Nun aber zum eigentlichen Problem. Obwohl in der <code>faces.xml</code> lediglich eine deutsche Locale als unterst&#252;tzt angegeben ist erscheint bei einem Konverterfehler ein englischer Text w&#228;hrend bei einem Pflichtfeld ein deutscher Text erscheint. Hier die Angabe aus der <code>faces.xml</code> f&#252;r die deutsche Locale:</p>
<div class="codebox">
<pre><span style="color: #000000; ">  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">locale-config</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
   </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">default-locale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">de</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">default-locale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
   </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">supported-locale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">de</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">supported-locale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">locale-config</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Schaut man in das letzte verf&#252;gbare JSF 1.2 Update 12 APi Jar (<code>jsf-api.jar</code>) von Sun findet man im Package <code>javax.faces</code> alle Recource Bundle Dateien f&#252;r die Fehlermeldungen (in fr&#252;heren JSF 1.2 RI Releases sind die Resource Bundle Dateien in <code>jsf-impl.jar</code zu finden). Dort liegt auch die deutsche &#220;bersetzung <code>Messages_de.properties</code>JSF 1.2 RI &#8211; Resource Bundle. Schaut man sich diese an sieht man leider, dass lediglich die Validator Texte und &#252;bersetzt wurden. Die Converter Texte sind weiterhin in Englisch vorhanden.</p>
<p>M&#246;chte man diese Texte nun in deutsch haben oder die Default Texte ab&#228;ndern reicht es aus in seiner eigenen Message Resource Bundle Datei die Keys zu &#252;berschreiben. Im folgenden alle vorgegebenen Converter und Validator Message Keys die man &#252;berschreiben kann eingedeutscht:</p>
<div class="codebox" style="height: 200px">
<pre style="margin:0;padding:0">javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' muss eine vorzeichenbehaftete Dezimalzahl sein.
javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' muss eine vorzeichenbehaftete Dezimalzahl die keine oder mehrere Stellen gefolgt von einem Dezimalpunkt und Nachkommastellen.  Beispiel: {1}
javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' muss eine Zahl mit ein oder mehr Ziffern sein.
javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' muss eine Zahl mit ein oder mehr Ziffern sein. Beispiel: {1}
javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' muss entweder 'true' oder 'false'.
javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' muss entweder 'true' oder 'false'. Jeder Wert anders als 'true' wird als 'false' interpretiert.
javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' muss eine Zahl zwischen 0 und 255 sein.
javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' muss eine Zahl zwischen 0 und 255 sein. Beispiel: {1}
javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' muss ein g&#252;ltiges Zeichen sein.
javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' muss ein g&#252;ltiges ASCII Zeichen sein.
javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' ist ein ung&#252;ltiges Datum. Beispiel: {1}
javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' ist ein ung&#252;ltiges Datum. Beispiel: {1}
javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' ist eine ung&#252;ltige Zeitangabe.
javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' ist eine ung&#252;ltige Zeitangabe. Example: {1}
javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' ung&#252;ltiges Datum und Zeitangabe.
javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' ung&#252;ltiges Datum und Zeitangabe. Beispiel: {1}
javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Ein 'pattern' oder 'type' Attribute muss definiert werden um den Wert ''{0}'' zu konvertieren.
javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' muss eine Zahl mit ein oder mehreren Ziffern sein.
javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}''  muss eine Zahl zwischen 4.9E-324 und 1.7976931348623157E308 sein. Beispiel: {1}
javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' muss zu einem Enum konvertierbar sein.
javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' muss zu dem Enum konvertierbar sein, dass die Konstante  ''{1}'' ent&#228;hlt.
javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' muss zu einem Enum konvertierbar, aber keine Enum Klasse vorhanden.
javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' muss zu einem Enum konvertierbar, aber keine Enum Klasse vorhanden.
javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' muss eine Zahl mit ein oder mehreren Ziffern sein.
javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' muss eine Zahl zwischen 1.4E-45 und 3.4028235E38 sein. Beispiel: {1}
javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' muss eine Zahl mit ein oder mehreren Ziffern sein.
javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}''  muss eine Zahl zwischen -2147483648 und 2147483647 sein. Beispiel: {1}
javax.faces.converter.LongConverter.LONG={2}: ''{0}'' muss eine Zahl mit ein oder mehreren Ziffern sein.
javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' muss eine Zahl zwischen -9223372036854775808 und 9223372036854775807. Beispiel: {1}
javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' ist kein g&#252;ltiges W&#228;hrungszeichen.
javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' ist kein g&#252;ltiges W&#228;hrungszeichen. Beispiel: {1}
javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' ist keine g&#252;ltige Prozentangabe.
javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' ist keine g&#252;ltige Prozentangabe. Beispiel: {1}
javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' ist keine Zahl.
javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' ist keine Zahl. Beispiel: {1}
javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' ist kein Zahlenmuster.
javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' ist kein Zahlenmuster. Beispiel: {1}
javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' muss eine Zahl mit ein oder mehreren Ziffern sein.
javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' muss eine Zahl zwischen -32768 und 32767. Beispiel: {1}
javax.faces.converter.STRING={1}: Konnte ''{0}'' nicht zu einem String konvertieren.

javax.faces.validator.DoubleRangeValidator.LIMIT=Validierungs-Fehler: Spezifiziertes Attribut kann nicht in einen Double-Typ umgewandelt werden.
javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Validierungs-Fehler: Wert ist gru00F6u00DFer als zulu00E4ssiges Maximum ''{0}''.
javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Validierungs-Fehler: Wert ist kleiner als zulu00E4ssiges Minimum ''{0}''.
javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
javax.faces.validator.DoubleRangeValidator.TYPE={0}: Validierungs-Fehler: Wert ist nicht vom richtigen Datentyp.
javax.faces.validator.LengthValidator.LIMIT=Validierungs-Fehler: Spezifiziertes Attribut kann nicht in korrekten Typ umgewandelt werden.
javax.faces.validator.LengthValidator.MAXIMUM={1}: Validierungs-Fehler: Wert ist gru00F6u00DFer als zulu00E4ssiges Maximum ''{0}''.
javax.faces.validator.LengthValidator.MINIMUM={1}: Validierungs-Fehler: Wert ist kleiner als zulu00E4ssiges Minimum ''{0}''.
javax.faces.validator.LongRangeValidator.LIMIT=Validierungs-Fehler: Spezifiziertes Attribut kann nicht in korrekten Typ umgewandelt werden.
javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validierungs-Fehler: Wert ist gru00F6u00DFer als zulu00E4ssiges Maximum ''{0}''.
javax.faces.validator.LongRangeValidator.MINIMUM={1}: Validierungs-Fehler: Wert ist kleiner als zulu00E4ssiges Minimum ''{0}''.
javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
javax.faces.validator.LongRangeValidator.TYPE={0}: Validierungs-Fehler: Wert ist nicht vom richtigen Datentyp.
javax.faces.validator.RequiredValidator.FAILED=Validierungs-Fehler: Wert wird benu00F6tigt.
javax.faces.validator.NOT_IN_RANGE=Validierungs-Fehler: Spezifiziertes liegt nicht zwischen {0} und {1}.</pre>
</div>
<p>Wer sich diese Datei im Originalzustand anschauen m&#246;chte kann sie sich hier herunterladen: <a href='http://javathreads.de/data/uploads/2009/06/messages_de.properties' title="JSF 1.2 RI - deutsche Message Resource Bundle Datei">Messages_de.properties</a><br />
Wer meine &#220;bersetzung direkt als Datei haben m&#246;chte kann sie sich hier herunterladen: <a href='http://javathreads.de/data/uploads/2009/06/messages_de_angepasst.properties' title="JSF 1.2 RI - angepasste deutsche Message Resource Bundle Datei">Messages_de_angepasst.properties</a></p>
<p>Und da ich selbst immer wieder nach diesen Message Keys suche ist dieser Blog Artikel entstanden =).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/07/eigene-texte-bei-validierung-und-konvertierung-in-jsf-12/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JSF 2.0 Spickzettel</title>
		<link>http://javathreads.de/2009/06/jsf-20-spickzettel/</link>
		<comments>http://javathreads.de/2009/06/jsf-20-spickzettel/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 08:00:17 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Cheat Cheet]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSF 2.0]]></category>
		<category><![CDATA[Refcard]]></category>
		<category><![CDATA[Spickzettel]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1712</guid>
		<description><![CDATA[Vor gut vier Wochen haben die Mitglieder des Java Community Process (JCP) die JavaServer Faces (JSF) 2.0 Spezifikation (JSR 314) durch eine Abstimmung abgesegnet:



Somit stehen jetzt Implementierungen nichts mehr im Weg und auch somit hat auch DZone direkt einen Spickzettel f&#252;r JSF 2.0 (Cheat Sheet) in ihrer Rubrik DZone Refcardz herausgebracht:



Der Spickzettel kann dabei als [...]]]></description>
			<content:encoded><![CDATA[<p>Vor gut vier Wochen haben die Mitglieder des Java Community Process (JCP) die JavaServer Faces (JSF) 2.0 Spezifikation (<a href="http://jcp.org/en/jsr/detail?id=314">JSR 314</a>) durch eine <a href="http://jcp.org/en/jsr/results?id=4939">Abstimmung</a> abgesegnet:</p>
<div class="singleImgDiv">
<a href="http://jcp.org/en/jsr/results?id=4939"><img src="http://javathreads.de/data/uploads/2009/06/jsf20specificationfinalballot.jpg" alt="JSF 2.0 Spezifikation Final Draft Abstimmung" title="JSF 2.0 Spezifikation Final Draft Abstimmung" width="608" height="284" class="alignnone size-full wp-image-1713" /></a>
</div>
<p>Somit stehen jetzt Implementierungen nichts mehr im Weg und auch somit hat auch DZone direkt einen <a href="http://refcardz.dzone.com/refcardz/javaserver-faces-20">Spickzettel f&#252;r JSF 2.0</a> (Cheat Sheet) in ihrer Rubrik DZone Refcardz herausgebracht:</p>
<div class="singleImgDiv">
<a href="http://refcardz.dzone.com/refcardz/javaserver-faces-20"><img src="http://javathreads.de/data/uploads/2009/06/dzonerefcardjsf202.jpg" alt="DZone Refcardz: JSF 2.0" title="DZone Refcardz: JSF 2.0" width="608" height="344" class="alignnone size-full wp-image-1718" /></a>
</div>
<p>Der Spickzettel kann dabei als ganz allgemeiner JSF Spickzettel angesehen werden aber er hebt die Erneuerungen durch JSF 2.0 an den verschiedenen Stellen deutlich hervor. Wie z.B. das neue Tag <code>f:ajax</code> oder <code>f:viewParam</code>:</p>
<div class="singleImgDiv">
<a href="http://refcardz.dzone.com/refcardz/javaserver-faces-20"><img src="http://javathreads.de/data/uploads/2009/06/dzonerefcardjsf20newtags2.jpg" alt="DZone Refcardz: JSF 2.0 New Tags" title="DZone Refcardz: JSF 2.0 New Tags" width="608" height="266" class="alignnone size-full wp-image-1719" /></a>
</div>
<p>Wie immer gilt, dass man sich f&#252;r den PDF Download bei DZone registrieren muss aber es besteht auch die M&#246;glichkeit sich den <a href="http://refcardz.dzone.com/refcardz/javaserver-faces-20">Spickzettel direkt online anzusehen</a>. Wer sich nicht registrieren m&#246;chte dem steht frei hier einen Kommentar mit g&#252;ltiger E-Mail zu hinterlassen und ich schicke ihm die Refcard direkt zu.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/06/jsf-20-spickzettel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interessante Webinare: JSR-299 mit Pete Muir und JSF 2 mit Ed Burns</title>
		<link>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/</link>
		<comments>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/#comments</comments>
		<pubDate>Mon, 11 May 2009 06:00:21 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSF 2]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Webinar]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1495</guid>
		<description><![CDATA[Diese Woche ist die Woche der interessanten Webinare und somit der kostenlosen interaktiven Weiterbildung. Ein Webinar ist ein interaktives Seminar &#252;ber das Web mit Bild und Ton bei dem es den Zuschauen m&#246;glich ist sich live mit dem Vortragenden zu unterhalten und zu diskutieren. Nat&#252;rlich kann man auch einfach nur zuschauen ;)
Das erste Webinar findet [...]]]></description>
			<content:encoded><![CDATA[<p>Diese Woche ist die Woche der interessanten Webinare und somit der kostenlosen interaktiven Weiterbildung. Ein Webinar ist ein interaktives Seminar &#252;ber das Web mit Bild und Ton bei dem es den Zuschauen m&#246;glich ist sich live mit dem Vortragenden zu unterhalten und zu diskutieren. Nat&#252;rlich kann man auch einfach nur zuschauen ;)</p>
<p>Das <a href="http://wikis.sun.com/display/TheAquarium/JCDI+-+JSR299">erste Webinar</a> findet am Dienstag um 19 Uhr mit Pete Muir (Red Hat) statt und tr&#228;gt den Titel &#8220;<strong>The new JSR299 &#8211; JCDI, Java Contexts and Dependency Injection</strong>&#8220;.</p>
<p>Das <a href="http://weblogs.java.net/blog/edburns/archive/2009/05/jsf2_webinar_ne.html">zweite Webinar</a> findet am <del datetime="2009-05-13T15:45:02+00:00">Donnerstag</del> Dienstag den 19.05. um 18 Uhr mit Ed Burns (Sun) statt und tr&#228;gt den Titel &#8220;<strong>JSF 2</strong>&#8220;.<br />
[Update]<br />
Hier die Pr&#228;sentation (<a href="https://javaserverfaces.dev.java.net/presentations/jsf2-complete-tour/jsf2-complete-tour.pdf">PDF Direktlink</a>) zu dem JSF 2 Webinar.</p>
<p>Ich werde versuchen mir beide live anzusehen und falls das nicht klappt gibt es mei&#223;t die M&#246;glichkeit sich im Nachhinein die Webinare noch einmal anzusehen. Wenn dem so ist werde ich hier noch notieren wie man an die Webinare nachtr&#228;glich gelangt.</p>
<p>[Update 13.05.] Webinar JSF 2.0 mit Pete Muir wurde auf den 19.05. korrigiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss RichFaces 3.3.0 GA mit einer Editor Komponente</title>
		<link>http://javathreads.de/2009/01/jboss-richfaces-330-ga-mit-einer-editor-komponente/</link>
		<comments>http://javathreads.de/2009/01/jboss-richfaces-330-ga-mit-einer-editor-komponente/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 08:00:45 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JBoss Tools]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=956</guid>
		<description><![CDATA[Vor ein paar Tagen wurde die JBoss RichFaces 3.3.0 GA als neue Version mit einigen neuen Komponenten ver&#246;ffentlicht. F&#252;r mich und wahrscheinlich f&#252;r viele andere ist das deswegen so interessant, weil ab sofort in den RichFaces ein Rich Editor (WYSIWYG Editor) enthalten ist. Dieser Editor sieht auf der RichFaces Live Demo Seite wie folgt aus:



Man [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Tagen wurde die <a href="http://labs.jboss.com/portal/jbossrichfaces/downloads">JBoss RichFaces 3.3.0 GA</a> als neue Version mit einigen neuen Komponenten <a href="http://in.relation.to/Bloggers/RichFaces330GAAvailable">ver&#246;ffentlicht</a>. F&#252;r mich und wahrscheinlich f&#252;r viele andere ist das deswegen so interessant, weil ab sofort in den RichFaces ein Rich Editor (WYSIWYG Editor) enthalten ist. Dieser Editor sieht auf der <a href="http://livedemo.exadel.com/richfaces-demo/welcome.jsf">RichFaces Live Demo Seite</a> wie folgt aus:</p>
<div class="singleImgDiv">
<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?c=editor"><img src="http://javathreads.de/data/uploads/2009/01/rfeditor.png" alt="" title="RichFaces Rich Editor"  class="borderGray alignnone size-full wp-image-957" /></a>
</div>
<p>Man kann den Funktionsumfang f&#252;r die Formatierungsm&#246;glichkeiten soweit abspecken, dass nur noch das n&#246;tigste f&#252;r den Benutzer m&#246;glich ist:</p>
<div class="singleImgDiv">
<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?c=editor"><img src="http://javathreads.de/data/uploads/2009/01/rfeditorsimple.png" alt="" title="RichFaces Rich Editor Simple" class="borderGray alignnone size-full wp-image-959" /></a>
</div>
<p>Wer den Editor live ausprobieren m&#246;chte kann dies auf der <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?c=editor">RichFaces Live Demo</a> direkt tun. Die einfachste Variante den Editor einzubinden und zu verwenden ist:</p>
<div class="code">
<pre>&lt;rich:editor value="#{myBean.editorContent}"/&gt;</pre>
</div>
<p>Die Editor Komponente selbst basiert auf den sehr bekannten <a href="http://tinymce.moxiecode.com/">TinyMCE JavaScript WYSIWYG Editor</a> und bisher musste man, wenn man einen solchen Rich Editor wollte, diesen manuell in sein Projekt einbinden.</p>
<p>Ich werde den Editor die Tage mal ausprobieren und dann wird man sehen ob er sich so einfach einbinden und verwenden l&#228;sst wie es bei den vielen anderen RichFaces Komponenten war.</p>
<p>Neben dem Editor ist noch eine weitere Ajax Komponente hinzugekommen: <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/queue.jsf?c=queue&#038;tab=usage">Ajax Queue</a>. Mit dieser ist es m&#246;glich direkt hintereinander abgesetzte Ajax Request so zu managen, dass der zweite Ajax Request erst abgesetzt wird wenn der erste beendet wurde. Somit kann man parallele Ajax Requests verhindern.</p>
<div class="singleImgDiv">
<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/queue.jsf?c=queue&#038;tab=usage"><img src="http://javathreads.de/data/uploads/2009/01/rfajaxqueue.png" alt="" title="RichFaces Ajax Queue" class="borderGray alignnone size-full wp-image-963" /></a>
</div>
<div class="subHeadline">JBoss RichFaces als JSF Ajax Framework</div>
<p>Wer bisher noch nichts von den RichFaces bzw. das dazugeh&#246;rige Ajax4Jsf geh&#246;rt hat der sollte sich auf der Live Demo Seite die vielen Beispiele mal ansehen. Neben den fertigen Ajax Komponenten wie z.b. die <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?c=dataTable&#038;tab=dataModel">DataTable</a>, <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/inplaceInput.jsf?c=inplaceInput&#038;tab=usage">Inplace Edit</a>, <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/tree.jsf?c=tree&#038;tab=usage">Tree</a> oder <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?c=fileUpload&#038;tab=usage">File Upload</a> (um nur einige zu nennen) ist vor allem der Ajax4Jsf Teil sehr interessant. Mit diesem lassen mit einfachen Mitteln bzw. Komponenten normale JSF Seiten &#8220;Ajaxifizieren&#8221; (<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/support.jsf?c=support&#038;tab=selects">a4j:support</a>), es lassen sich JavaScript Methoden dynamisch erzeugen (<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/jsFunction.jsf?c=jsFunction&#038;tab=usage">a4j:jsfunction</a>) die mit JSF Managed Beans reden oder Teile der JSF Seite neu Rendern oder man kann den Server mit Hilfe von Ajax Anfragen um z.B. einen Status abzufragen (<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/poll.jsf?c=poll&#038;tab=usage">a4j:poll</a>).<br />
Pers&#246;nlich finde ich genau diesen Ajax4Jsf Teil und die gesamte Einfachheit der Verwendung der RichFaces Komponenten den Grund warum ich die JBoss RichFaces sehr empfehlen kann.</p>
<p>Noch ein letzter Tipp: Wer mit den RichFaces arbeitet sollte sich auf alle F&#228;lle die <a href="http://javathreads.de/2008/08/jboss-tools-300-alpha1-langsam-geht-es-vorwaerts/">JBoss Tools in Eclipse installieren</a> um die direkte RichFaces Unterst&#252;tzung im JSF Editor zu erhalten. Neben Autocomplete bei den Komponenten, dem Rich Editor f&#252;r JSF oder xhtml Seiten erkennt er auch Expressions und kann auf die Methoden und Beans referenzieren.</p>
<p>Viel Spass beim ausprobieren!</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/01/jboss-richfaces-330-ga-mit-einer-editor-komponente/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Schnellen &#220;berlick auf JSF oder JPA mit Hilfe von Spickzetteln</title>
		<link>http://javathreads.de/2008/10/schnellen-ueberlick-auf-jsf-oder-jpa-mit-hilfe-von-spickzetteln/</link>
		<comments>http://javathreads.de/2008/10/schnellen-ueberlick-auf-jsf-oder-jpa-mit-hilfe-von-spickzetteln/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 06:30:47 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Cheat Cheet]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Refcard]]></category>
		<category><![CDATA[Spickzettel]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=519</guid>
		<description><![CDATA[Es sind wieder zwei wirklich interessante Spickzettel auf DZone erschienen. Dort hei&#223;en sie &#8220;Refcardz&#8221; und sind somit auch unter refcardz.dzone.com zu erreichen.



Die erste Refcard beinhaltet die Grundlagen &#252;ber Java Server Faces (JSF). Es wird der Entwicklunsprozess, der Lebenszyklus (Lifecycle), die Konfigurationsdatei faces-config.xml, die JSF Expression Language (EL) sowie die JSF Core und HTML Tags und [...]]]></description>
			<content:encoded><![CDATA[<p>Es sind wieder zwei wirklich interessante Spickzettel auf DZone erschienen. Dort hei&#223;en sie &#8220;Refcardz&#8221; und sind somit auch unter <a href="http://refcardz.dzone.com/">refcardz.dzone.com</a> zu erreichen.</p>
<div class="singleImgDiv">
<a href="http://refcardz.dzone.com"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcardzlogosmall.png" alt="" title="DZone Logo" width="327" height="78" class="alignnone size-full wp-image-535" /></a>
</div>
<p>Die <a href="http://refcardz.dzone.com/refcardz/javaserver-faces?oid=hom4917">erste Refcard</a> beinhaltet die Grundlagen &#252;ber <strong>Java Server Faces (JSF)</strong>. Es wird der Entwicklunsprozess, der Lebenszyklus (Lifecycle), die Konfigurationsdatei <span class="code">faces-config.xml</span>, die JSF Expression Language (EL) sowie die JSF Core und HTML Tags und noch einiges anderes aufgezeigt.</p>
<p>Die <a href="http://refcardz.dzone.com/refcardz/getting-started-with-jpa?oid=hom5110">zweite Refcard</a> beinhaltet die Gundlagen &#252;ber <strong>Java Persistence API (JPA)</strong>. Themen sind unter anderem das Objektrelationale Mapping, den EntityManager erhalten und verwenden, Transaktionen verwenden, Queries ausf&#252;hren und noch einiges mehr.</p>
<table style="width: 100%; margin-bottom: 15px;">
<tr>
<td style="width: 50%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/javaserver-faces?oid=hom4917"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcardjsf.png" alt="" title="DZone Refcard JSF" width="206" height="266" class="alignnone size-full wp-image-522" /></a>
</td>
<td style="width: 50%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/getting-started-with-jpa?oid=hom5110"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcardjpa.png" alt="" title="DZone Refcard JPA" width="206" height="266" class="alignnone size-full wp-image-521" /></a>
</td>
</tr>
</table>
<p>Ich finde vor allem die JPA Refcard wirklich brauchbar. Es behandelt viele grunds&#228;tzliche Themen die man bei jedem Projekt, was mit JPA oder Hibernate durchf&#252;hrt, ben&#246;tigt und dient dadurch wirklich als n&#252;tzliche Hilfe. Man kann es auch sehr gut als Unterst&#252;tzung in den Einstieg von JPA oder Hibernate verwenden, was nat&#252;rlich auch f&#252;r alle anderen Spickzettel gilt.</p>
<p>Die JSF Refcard behandelt auch viele grunds&#228;tzliche Themen, aber letztlich finde ich z.B. eine online TLD f&#252;r die Tags z.b. wesentlich praktischer. Andererseits ist z.B. auch bei jedem Html Tag ein Screenshot der Komponente zu sehen, was zum Beispiel den Unterschied zwischen &#8220;<span class="code">h:selectOneListbox</span>&#8220;, &#8220;<span class="code">h:selectOneMenu</span>&#8220;, &#8220;<span class="code">h:selectManyListbox</span>&#8221; und &#8220;<span class="code">h:selectManyMenu</span>&#8221; schnell und deutlich hervorhebt. Viele verwechseln gerade bei diesen eben genannten immer gerne die Komponenten bzw. das daraus resultierende Html Ergebnis ;).</p>
<p>Neben den beiden hier vorgestellten Refcardz zu JSF und JPA sind schon eine Reihe anderer interessanter Spickzettel ver&#246;ffentlicht worden. So findet man zum Beispiel Spickzettel zu &#8220;<a href="http://refcardz.dzone.com/refcardz/dependency-injection-in-ejb3">Dependency Injection in EJB 3</a>&#8220;, &#8220;<a href="http://refcardz.dzone.com/refcardz/design-patterns">Design Patterns</a>&#8220;, &#8220;<a href="http://refcardz.dzone.com/refcardz/getting-started-eclipse">Getting Started with Eclipse</a>&#8221; oder f&#252;r alle die mit RichFaces, Ajax und dadurch auch mit <a href="http://jquery.com">jQuery</a> zu tun haben &#8220;<a href="http://refcardz.dzone.com/refcardz/jquery-selectors">jQuery Selectors</a>&#8220;.</p>
<table style="width: 100%">
<tr>
<td style="width: 25%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/dependency-injection-in-ejb3"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcarddependencyinjectionejb3.png" alt="" title="DZone Refcard Dependency Injection with EJB 3" width="103" height="133" class="alignnone size-full wp-image-524" /></a>
</td>
<td style="width: 25%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/design-patterns"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcarddesignpatterns.png" alt="" title="DZone Refcard Design Patterns" width="103" height="133" class="alignnone size-full wp-image-525" /></a>
</td>
<td style="width: 25%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/getting-started-eclipse"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcardgettingstartedwitheclipse.png" alt="" title="DZone Refcard Getting Started with Eclipse" width="103" height="133" class="alignnone size-full wp-image-526" /></a>
</td>
<td style="width: 25%; text-align:center">
<a href="http://refcardz.dzone.com/refcardz/jquery-selectors"><img src="http://javathreads.de/data/uploads/2008/10/dzonerefcardjqueryselectors.png" alt="" title="DZone Refcard jQuery Selectors" width="103" height="133" class="alignnone size-full wp-image-527" /></a>
</td>
</tr>
</table>
<p>Man kann alle Refcardz auf <a href="http://refcardz.dzone.com/">refcardz.dzone.com</a> herunterladen, muss allerdings leider erst registrieren. Falls sich das einer g&#228;nzlich sparen m&#246;chte schicke ich sie ihm auch gerne per Mail zu =).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2008/10/schnellen-ueberlick-auf-jsf-oder-jpa-mit-hilfe-von-spickzetteln/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutorial: Ajax Ladeanzeige wie bei Google mit JBoss RichFaces</title>
		<link>http://javathreads.de/2008/10/tutorial-ajax-ladeanzeige-wie-bei-google-mit-jboss-richfaces/</link>
		<comments>http://javathreads.de/2008/10/tutorial-ajax-ladeanzeige-wie-bei-google-mit-jboss-richfaces/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 17:07:38 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Ajax4Jsf]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=388</guid>
		<description><![CDATA[Einer der Grunds&#228;tze bei der Verwendung von Ajax ist, dass jeder Ajax Request, der von Belang f&#252;r den Anwender ist, visuell in irgendeiner Form angezeigt werden muss. Ajax Requests sind bekanntlich asynchron und laufen im Hintergrund, so dass der Anwender diesen nicht wie einen normalen Request im Browser mitbekommt bzw. dargestellt bekommtn. Somit wird dieser [...]]]></description>
			<content:encoded><![CDATA[<p>Einer der Grunds&#228;tze bei der Verwendung von Ajax ist, dass jeder Ajax Request, der von Belang f&#252;r den Anwender ist, visuell in irgendeiner Form angezeigt werden muss. Ajax Requests sind bekanntlich asynchron und laufen im Hintergrund, so dass der Anwender diesen nicht wie einen normalen Request im Browser mitbekommt bzw. dargestellt bekommtn. Somit wird dieser sich doch sehr wundern oder es nicht nachvollziehen k&#246;nnen, wenn auf einmal ein Teil der Seite ausgetauscht, verschwunden oder neu hinzugef&#252;gt wurde. So kommen wir zu der &#8220;Ajax Ladeanzeige&#8221; oder &#8220;Ajax Loading Indicator&#8221; wie es oft genannt wird.</p>
<p>Ein meiner Meinung nach sehr sch&#246;nes Beispiel f&#252;r eine solche Ajax Ladeanzeige bietet Google. Wer schon mit Google Anwendungen gearbeitet hat dem wird diese globale Ladeanzeige mittig oben im Browser durchaus bekannt sein:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2008/09/googleajaxloadingimg.png" alt="" title="Google Ajax Ladeanzeige" class="borderGray alignnone size-full wp-image-441" />
</div>
<p>Der Vorteil einer solchen globalen Ladeanzeige liegt darin, dass sie dem Anwender bekannt ist. Hat er sich einmal daran gew&#246;hnt, dass sie mittig oben zu finden ist f&#228;llt sie ihm bei jedem erneutem Anzeigen eher ins Auge und er sieht sofort, dass eine Aktion im Hintergrund passiert.</p>
<p>Eine solche Ladeanzeige kann man sehr einfach mit Hilfe der JBoss RichFaces erstellen und in einer eigenen Anwendung f&#252;r die Statusanzeige eines jeden Ajax Requests verwenden. Wie genau das angestellt wird ist im folgenden zu lesen.</p>
<p><span id="more-388"></span></p>
<div class="subHeadline">Ajax4Jsf Status Komponente</div>
<p>Um unter Verwendung der JBoss RichFaces auf einen aktiven Ajax Request, der zum Beispiel durch einen <span class="code"><a href="http://livedemo.exadel.com/richfaces-demo/richfaces/commandButton.jsf?c=commandButton&#038;tab=usage">a4j:commandButton</a></span> oder <span class="code"><a href="http://livedemo.exadel.com/richfaces-demo/richfaces/commandLink.jsf?c=commandLink&#038;tab=usage">a4j:commandLink</a></span> ausgel&#246;st wurde zu reagieren und einen Status anzuzeigen dient die RichFaces Komponente &#8220;<span class="code"><a href="http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf?c=status&#038;tab=usage">a4j:status</a></span>&#8220;. In der einfachsten Variante wird die a4j:status Komponente wie folgt erstellt:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:status </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;commonstatus&quot;</span><span style="color: #FF0000; ">  startText</span><span style="color: #0000FF; ">=&quot;In progress...&quot;</span><span style="color: #FF0000; "> stopText</span><span style="color: #0000FF; ">=&quot;Finish&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
</div>
<p>Sobald ein Ajax Request durch einen CommandLink oder CommandButton gestartet wird reagiert diese Statuskomponente darauf und zeigt den Text &#8220;Wird geladen&#8230;&#8221;. Ist der Ajax Request beendet (und nat&#252;rlich auch schon vor dem Ajax Request) wird der Text &#8220;Fertig&#8221; angezeigt.</p>
<div class="singleImgDiv">
<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf?c=status&#038;tab=usage"><img src="http://javathreads.de/data/uploads/2008/09/ajax4jsfstatusbeispiel.png" alt="" title="Aajx4Jsf Status Komponente" class="borderGray alignnone size-full wp-image-468" /></a>
</div>
<p>Diese Komponente hat noch weitere M&#246;glichkeiten genutzt zu werden. So k&#246;nnen zum Beispiel ganze Html Bl&#246;cke ein und ausgeblendet werden anstatt nur ein Text, wie auch auf der <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf?c=status&#038;tab=usage">RichFaces LiveDemo</a> zu sehen.</p>
<div class="subHeadline">Ladeanzeige Div erstellen und mit CSS formatieren</div>
<p>Wir wollen aber in diesem Tutorial eine globale Ajax-Ladeanzeige verwenden und ben&#246;tigen somit noch ein Html Fragment, welches uns das Ladebild und Text mittig oben im Browserfenster anzeigt.<br />
Dazu wird ein <span class="code">div</span> Element, dass mit CSS formatiert wird, erstellt. Dieses <span class="code">div</span> Block muss nat&#252;rlich auf jeder Seite vorhanden sein, die einen Ajax Request ausl&#246;sen kann. Ich arbeite bei bei der Entwicklung einer JSF Anwendung immer mit <a href="https://facelets.dev.java.net/">Facelets</a> und somit ist das verwendete Facelets Template (<span class="code">template.xhtml</span>) der richtige Platz um diesen Code unterzubringen:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;globalStatusDiv&quot;</span><span style="color: #FF0000; "> style</span><span style="color: #0000FF; ">=&quot;display:none;&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">img </span><span style="color: #FF0000; ">src</span><span style="color: #0000FF; ">=&quot;#{baseUri}/img/ajax-loader.gif&quot;</span><span style="color: #FF0000; "> alt</span><span style="color: #0000FF; ">=&quot;Loading&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">&amp;#160;Loading..
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Die dynamische Ajax Loading Grafik kann man sich bequem auf <a href="http://ajaxload.info/">ajaxload.info</a> generieren lassen und passend zu dem obigen Code Beispiel im Ordner <span class="code">img</span> ablegen. Man kann an dieser Stelle nat&#252;rlich auch wie bei JSF gewohnt die <span class="code">h:graphicImage</span> Komponente verwenden.<br />
Hier noch der Ausschnitt wie der Ausdruck <span class="code">#{baseUri}</span> ausgewertet wird:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">html </span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">=&quot;http://www.w3.org/1999/xhtml&quot;</span><span style="color: #FF0000; ">
  ...
  xmlns:c</span><span style="color: #0000FF; ">=&quot;http://java.sun.com/jstl/core&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  ...
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">c:set </span><span style="color: #FF0000; ">var</span><span style="color: #0000FF; ">=&quot;baseUri&quot;</span><span style="color: #FF0000; "> value</span><span style="color: #0000FF; ">=&quot;#{facesContext.externalContext.requestContextPath}&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  ...</span></pre>
</div>
<p>Dazu dazugeh&#246;rige CSS wird separat in einer externen CSS Datei abgelegt:</p>
<div class="codebox">
<pre><span style="color: #800000; ">* html body </span><span style="color: #000000; ">{</span><span style="color: #FF0000; "> margin</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 0</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "> overflow-y</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> hidden</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "> padding</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 0</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "> </span><span style="color: #000000; ">}</span><span style="color: #800000; ">

#globalStatusDiv </span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">
  position</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> fixed</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  top</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 0</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  text-align</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> center</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  margin-left</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> auto</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  margin-right</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> auto</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  left</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 50%</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  width</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 100px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  margin-left</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> -50px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  height</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 25px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  line-height</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 25px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  background-color</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> #FFF</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  padding</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 2px 15px 2px 10px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  color</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> #000</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  font-family</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> Verdana,Arial,Helvetica,sans-serif</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  font-size</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 12px</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  font-weight</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> bold</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  z-index</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 10000</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  border</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> 1px solid #BBB</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
  border-top</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> none</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
</span><span style="color: #000000; ">}</span><span style="color: #800000; ">

#globalStatusDiv img </span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">
  vertical-align</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> middle</span><span style="color: #000000; ">;</span><span style="color: #FF0000; ">
</span><span style="color: #000000; ">}</span></pre>
</div>
<div class="subHeadline">Ajax4Jsf Status Komponente anpassen</div>
<p>Nachdem nun das &#8220;GlobalStatus&#8221; <span class="code">div</span> Element samt CSS Angaben definiert sind muss nun noch die Ajax4Jsf Status Komponente angepasst werden. Es soll nun nicht mehr der Text angezeigt werden sondern das &#8220;GlobalStatus&#8221; <span class="code">div</span> ein- und ausgeblendet werden. Dazu bedienen wir uns der JavaScript Bibliothek jQuery, die mit den RichFaces gleich mitgeliefert wird. Damit das Beispiel funktioniert und wir die von den RichFaces mitgelieferte jQuery JavaScript Bibliothek nutzen k&#246;nnen m&#252;ssen wir die <a href="http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html#ScriptsandStylesLoadStrategy">RichFaces &#8220;Script Load Strategy&#8221;</a> von &#8220;DEFAULT&#8221; auf &#8220;ALL&#8221; in der <span class="code">web.xml</span> ab&#228;ndern:</p>
<div class="codebox">
<pre><span style="color: #000000; ">  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context-param</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.richfaces.LoadScriptStrategy</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">ALL</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">context-param</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Damit werden immer alle JavaScript Resroucen auf jeder Seite geladen und nicht nur wenn eine RichFaces Komponente sie ben&#246;tigt. Es bestehen hier nat&#252;rlich mehrere, sogar viel bessere L&#246;sungen als diese hier verwendete.</p>
<p>Anschlie&#223;end die Ajax Status Komponente wie folgt ab&#228;ndern.</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:status </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;globalStatus&quot;</span><span style="color: #FF0000; "> forceId</span><span style="color: #0000FF; ">=&quot;true&quot;</span><span style="color: #FF0000; "> layout</span><span style="color: #0000FF; ">=&quot;none&quot;</span><span style="color: #FF0000; ">
  onstart</span><span style="color: #0000FF; ">=&quot;jQuery('#globalStatusDiv').fadeIn('fast')&quot;</span><span style="color: #FF0000; ">
  onstop</span><span style="color: #0000FF; ">=&quot;jQuery('#globalStatusDiv').fadeOut('slow')&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span></pre>
</div>
<p>Es wird nichts weiter gemacht als das &#8220;GlobalStatus&#8221; div-Block bei einem Ajax Request sichtbar zu machen (<span class="code">fadeIn()</span>) und nach dem Request wieder auszublenden (<span class="code">fadeOut()</span>). Mehr zu diesen Funktionen auch in der offiziellen <a href="http://docs.jquery.com/Effects">jQuery Effects Dokumentation</a>.</p>
<div class="subHeadline">Beispielseite mit Ajax Request</div>
<p>Nun fehlt nur noch eine Kleine Beispielseite. Dazu habe ich mir eine klein Bean mit einem Attribut erstellt, welcher mit Ajax gesetzt und anschlie&#223;end ausgegeben werden wird.</p>
<p>Hier die Bean &#8211; ich verwende in diesem Beispiel JBoss Seam, daher wird mit der <span class="code">@Name</span> Annotation gearbeitet. Die herk&#246;mmliche Bean Konfiguration durch die <span class="code">faces-config.xml</span> funktioniert nat&#252;rlich genauso.</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">package</span><span style="color: #000000; "> de.javathreads.helloworldseamprojekt.session;

</span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> org.jboss.seam.annotations.Name;

@Name(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">editBean</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">)
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> EditBean {

  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> String name;

  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> setName(String name) {
    </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> name;
  }

  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> String getName() {
    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> name;
  }
}</span></pre>
</div>
<p>Und hier der interessantere Part &#8211; der Ausschnitt aus JSF Seite:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:inputText </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;#{editBean.name}&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:commandButton </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;Speichern&quot;</span><span style="color: #FF0000; "> reRender</span><span style="color: #0000FF; ">=&quot;viewNamePanel&quot;</span><span style="color: #FF0000; "> status</span><span style="color: #0000FF; ">=&quot;globalStatus&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:outputPanel </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;viewNamePanel&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  Name: #{editBean.name}
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">a4j:outputPanel</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Wichtig ist, dass bei der <span class="code">a4j:commandButton</span> Komponente das Attribut <span class="code">status</span> gesetzt ist. Mit diesem Attribut wird die <span class="code">a4j:status</span> Komponente angegeben, die f&#252;r diesen Ajax Request anzeigen soll.</p>
<p>Das Ergebnis sieht dann wie folgt aus. Beim absenden des Ajax Requests, hier durch Dr&#252;cken das &#8220;Speichern&#8221; Buttons, erscheint die Loading Anzeige:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2008/09/globalstatusajaxbsp1.png" alt="" title="Ajax Global Status Anzeige - eingeblendet" class="borderGray alignnone size-full wp-image-476" />
</div>
<p>Ist der Request fertig und wurde der Ausgabe Bereich (Name anzeigen) neu gerendert verschwindet auch die Ladeanzeige:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2008/09/globalstatusajaxbsp2.png" alt="" title="Ajax Global Status Anzeige - ausgeblendet" class="borderGray alignnone size-full wp-image-477" />
</div>
<p>Habe vor einiger Zeit Jing gesehen und wollte es schon immer mal ausprobieren &#8211; hier also das &#8220;live&#8221; Beispiel:</p>
<div style="text-align:center; margin-bottom: 20px;">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="600" height="258"><param name="movie" value="http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/bootstrap.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/FirstFrame.jpg&#038;content=http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/GlobalStatusLadeanzeige.swf&#038;width=600&#038;height=258"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param>  <embed src="http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="600" height="258" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/FirstFrame.jpg&#038;content=http://content.screencast.com/users/javathreads/folders/Jing/media/71ca34a0-f6f0-4792-b05a-76f6a733ba02/GlobalStatusLadeanzeige.swf&#038;width=600&#038;height=258" allowFullScreen="true" scale="showall"></embed></object>
</div>
<p>Das Layout des Statusanzeige oder Loadingblocks kann man nat&#252;rlich komplette mit Hilfe von Html und CSS selbst bestimmen. Bei OpenWishes haben wir zum Beispiel eine gelbe Hintergrundgrafik gew&#228;hlt. Und weil Jing soviel Spass gemacht hat kommt hier das Beispiel aus OpenWishes. Hier erscheint die Ladeanzeige w&#228;hrend wenn man sich einen neuen Wunsch erstellen m&#246;chte und dazu die Produktwebseite angibt die anschlie&#223;end geparst werden muss um die Informationen zu erhalten:</p>
<div style="text-align:center; margin-bottom: 20px;">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="600" height="480"><param name="movie" value="http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/bootstrap.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/FirstFrame.jpg&#038;content=http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/OpenWishesGlobalStatus.swf&#038;width=600"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param>  <embed src="http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="600" height="480" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/FirstFrame.jpg&#038;content=http://content.screencast.com/users/javathreads/folders/Jing/media/d7837c0d-db57-411f-b980-0c7e3508863e/OpenWishesGlobalStatus.swf&#038;width=893&#038;height=480" allowFullScreen="true" scale="showall"></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2008/10/tutorial-ajax-ladeanzeige-wie-bei-google-mit-jboss-richfaces/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>RichFaces JavaScript Fehler &#8220;this._form is null&#8221;</title>
		<link>http://javathreads.de/2008/09/richfaces-javascript-fehler-this_form-is-null/</link>
		<comments>http://javathreads.de/2008/09/richfaces-javascript-fehler-this_form-is-null/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 09:00:39 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ajax4Jsf]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=391</guid>
		<description><![CDATA[Entwickelt man an einer JSF Anwendung unter der Verwendung von JBoss RichFaces bekommt ziemlich jeder mal den Fehler &#8220;this._form is null&#8221; zu sehen. Hat man im Firefox noch das Add-on Firebug installiert so sieht die Meldung meist wie folgt aus:



F&#252;r diesen Fehler gibt es viele Ursachen aber generell nur eine Begr&#252;ndung: Es existiert kein Formular [...]]]></description>
			<content:encoded><![CDATA[<p>Entwickelt man an einer JSF Anwendung unter der Verwendung von JBoss RichFaces bekommt ziemlich jeder mal den Fehler &#8220;<span class="code">this._form is null</span>&#8221; zu sehen. Hat man im Firefox noch das Add-on Firebug installiert so sieht die Meldung meist wie folgt aus:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2008/09/richfacesdatatablesortierenthisformnullfehler.png" alt="" title="RichFaces DataTable Sortieren &quot;this._form is null&quot; Fehler" class="borderGray alignnone size-full wp-image-394" />
</div>
<p>F&#252;r diesen Fehler gibt es viele Ursachen aber generell nur eine Begr&#252;ndung:<strong> Es existiert kein Formular</strong> welches um den Link, Button oder Bereich, im diesem Beispiel eine Tabelle, gespannt sein muss (<span class="code">&lt;h:form&gt;&#8230;&lt;/h:form&gt;</span>).<br />
Vor allem bei der Verwendung von Ajax (Ajax4Jsf Tags) bzw. den RichFaces Komponenten wie der <span class="code">&lt;a4j:commandLink&gt;</span> oder der <span class="code">&lt;a4j:commandButton&gt;</span> sowie alle Komponenten die selbst intern auch Ajax verwenden wie z.b. die Sortierfunktion bei der Rich DataTable kommt dieser Fehler in der Entwicklung h&#228;ufig vor.</p>
<p>In diesem Beispiel (Screenshot oben) wurde eine <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?c=sorting&#038;tab=usage">RichFaces DataTable mit Sortieren der Spalten</a> verwendet. Im ersten Schritt erstellt man meist nur die DataTable (<span class="code">&lt;rich:dataTable&gt;&#8230;&lt;/rich:dataTable&gt;</span>) ohne Sortierung und dazu wird nat&#252;rlich auch kein Formular ben&#246;tigt. Um die Sortierung hinzuzuf&#252;gen wird bei den einzelnen <code>&lt;rich:column&gt;</code> Elementen das Attribut <code>sortBy=""</code> hinzugef&#252;gt. So sieht der Source Code f&#252;r eine solche Tabelle wie folgt aus:</p>
<div class="codebox">
<pre><span style="color: #000000; ">  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:dataTable </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;userList&quot;</span><span style="color: #FF0000; ">
       value</span><span style="color: #0000FF; ">=&quot;#{userList.resultList}&quot;</span><span style="color: #FF0000; ">
       var</span><span style="color: #0000FF; ">=&quot;user&quot;</span><span style="color: #FF0000; ">
       rendered</span><span style="color: #0000FF; ">=&quot;#{not empty userList.resultList}&quot;</span><span style="color: #FF0000; ">
       style</span><span style="color: #0000FF; ">=&quot;margin-top: 20px; width: 500px;&quot;</span><span style="color: #FF0000; ">
       columnsWidth</span><span style="color: #0000FF; ">=&quot;50px&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

       </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">f:facet </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;header&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
          </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:columnGroup</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
            </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:column </span><span style="color: #FF0000; ">colspan</span><span style="color: #0000FF; ">=&quot;2&quot;</span><span style="color: #FF0000; "> style</span><span style="color: #0000FF; ">=&quot;text-align:left;&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
              </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:outputText </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;Alle konfigurierten User&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
              &amp;#160;(#{userList.resultCount})
           </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:column</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
         </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:columnGroup</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">f:facet</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:column </span><span style="color: #FF0000; ">sortBy</span><span style="color: #0000FF; ">=&quot;#{user.id}&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
            </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">f:facet </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;header&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">Id</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">f:facet</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
            </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:outputText </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;#{user.id}&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:column</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:column </span><span style="color: #FF0000; ">sortBy</span><span style="color: #0000FF; ">=&quot;#{user.name}&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
            </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">f:facet </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;header&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">Name</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">f:facet</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
            #{user.name}
        </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:column</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

      </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:dataTable</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Das Sortieren selbst wird mit Hilfe von Ajax durchgef&#252;hrt. Ajax allein ben&#246;tigt nat&#252;rlich kein Formular allerdings ben&#246;tigen die RichFaces Komponenten die mit Ajax funktionieren oder Ajax Funktionalit&#228;t einbringen ein g&#252;ltiges Formular. Der Grund liegt darin, dass fast immer etwas mit Ajax &#8220;submittet&#8221; werden soll um eine Aktion auzuf&#252;hren. So kommt dieser &#8220;<span class="code">this._form is null</span>&#8221; auch h&#228;ufig bei der Verwendung der <span class="code">&lt;a4j:commandLink&gt;</span> Komponente vor. Obwohl es aussieht wie ein normaler Html Link wird dennoch ein Formular submittet und somit ein <span class="code">&lt;h:form&gt;</span> Tag ben&#246;tigt.</p>
<p>So ist die L&#246;sung f&#252;r unsere Tabelle mit der Sortierfunktion relativ einfach:</p>
<div class="codebox">
<pre><span style="color: #000000; ">  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
      </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rich:dataTable </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;userList&quot;</span><span style="color: #FF0000; "> ...</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        ...
      </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rich:dataTable</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Noch ein kleiner Tipp am Rande: Verwendet man die M&#246;glichkeit nach dem Ajax Request einen Bereich oder eine Komponente neu zu renderen (Attribut <span class="code">reRender</span>) dann sollte man versuchen das <span class="code">&lt;h:form&gt;</span> Tag au&#223;erhalb des neu zu rendernden Bereiches zu lassen. Zum Beispiel so:</p>
<div class="codebox">
<pre><span style="color: #000000; ">  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

      </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:outputPanel </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&quot;editUserPanel&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> Eingabefelder welche mit Ajax gespeichert wird </span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:inputText </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;#{user.name}&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        ...
      </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">a4j:outputPanel</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

      </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a4j:commandLink </span><span style="color: #FF0000; ">action</span><span style="color: #0000FF; ">=&quot;#{myBB.saveUser}&quot;</span><span style="color: #FF0000; "> reRender</span><span style="color: #0000FF; ">=&quot;editUserPanel&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">

    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Setzt man das <span class="code">&lt;h:form&gt;</span> Tag innerhalb des <span class="code">&lt;a4j:outputPanel&gt;</span> Tags kann es nach dem neu Rendern auch vorkommen, dass dieser omin&#246;se &#8220;<span class="code">this._form is null</span>&#8221; Fehler auftritt.<br />
Am besten f&#228;hrt man, wenn die Formular Tags au&#223;erhalb solcher dynamischen Bereiche definiert sind. M&#246;chte man die zu submittenden Daten f&#252;r den Ajax Reqeust eingrenzen steht extra daf&#252;r die <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/region.jsf?c=region&#038;tab=usage">AjaxRegion Komponente</a> (<span class="code">&lt;a4j:region&gt;</span>) zur Verf&#252;gung.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2008/09/richfaces-javascript-fehler-this_form-is-null/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

