<?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>Xoft &#187; JSF</title>
	<atom:link href="http://www.xoft.pl/category/jsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xoft.pl</link>
	<description>O programowaniu i innych rzeczach</description>
	<lastBuildDate>Fri, 12 Feb 2010 14:42:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IceFaces czy RichFaces: co wybrać?</title>
		<link>http://www.xoft.pl/2008/05/08/icefaces-czy-richfaces-co-wybrac/</link>
		<comments>http://www.xoft.pl/2008/05/08/icefaces-czy-richfaces-co-wybrac/#comments</comments>
		<pubDate>Thu, 08 May 2008 11:44:11 +0000</pubDate>
		<dc:creator>Piotr Kochański</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://www.xoft.pl/2008/05/08/icefaces-czy-richfaces-co-wybrac/</guid>
		<description><![CDATA[Wygląda na to, że są to dwaj najpopularniejsi gracze na rynku darmowych ajaksowych komponentów JSF, co zatem wybrać? Pierwsza rzecz: czy trzeba w ogóle wybierać? Niestety tak, obie biblioteki nie chcą ze sobą współpracować &#8211; każda z nich inaczej włącza się w cykl życia strony JSF i to powoduje różna zabawne problemy. Podobno w którejś [...]]]></description>
			<content:encoded><![CDATA[<p>Wygląda na to, że są to dwaj najpopularniejsi gracze na rynku darmowych ajaksowych komponentów JSF, co zatem wybrać? Pierwsza rzecz: czy trzeba w ogóle wybierać? Niestety tak, obie biblioteki nie chcą ze sobą współpracować &#8211; każda z nich inaczej włącza się w cykl życia strony JSF i to powoduje różna zabawne problemy. Podobno w którejś tam wersji ma być możliwa koegzystencja obu produktów&#8230; </p>
<p>Porównanie obu bibliotek można znaleźć na stronie <a href="http://www.jsfmatrix.net/">JSF Matrix</a>, ale niewiele z niego wynika, jak to zazwyczaj bywa ze statystykami w rodzaju &#8220;liczba dostępnych komponentów&#8221;.</p>
<p><strong>Kto i co robi</strong><br />
Zacznijmy od krótkiego przedstawienia obu bibliotek.</p>
<p><a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a>. Biblioteka była produktem firmy Exadel, która połączyła się, albo została kupiona przez JBoss-a, czyli RedHata. Ehh, ten świat wielkich korporacji&#8230; Biblioteka jest dostępna na licencji Open Source, zawiera ponad 50 różnych komponentów JSF.</p>
<p><a href="http://www.icefaces.org">ICEFaces</a> jest robiona przez firmę ICESoft i też jest opensorsowa.</p>
<p><strong>Zalety RichFaces i wady ICE Faces</strong><br />
Dużą zaletą RichFaces jest pod-biblioteka Ajax4JSF, która pozwala &#8220;zajaksować&#8221; dowolny komponent JSF. Jest to bardzo wygodne, jeżeli mamy już napisany kawałek aplikacji i chcemy gdzieniegdzie ją upiększyć ajaksowymi wodotryskami.</p>
<p>Kolejną przyjemną cechą RichFaces jest możliwość określenia zachowania komponentów tak, żeby niekoniecznie za każdym razem łączyły się z serwerem (Ajaxa im można wyłączyć, innymi słowy). Można na przykład utworzyć stronę z zakładkami w ten sposób, że wszystkie są od razu ładowane i przy ich zmianie nie jest potrzebny kontakt z serwerem. Oczywiście można także skonfigurować sobie zachowanie ajaksowe, czyli zakładki będą doładowywane dynamicznie. </p>
<p>ICEFaces czegoś takiego nie potrafi, jego komponenty zawsze kontaktują się z serwerem, co jest trochę głupie w przypadku dajmy na to komponentu kalendarza &#8211; można go przecież zrobić łatwo po stronie klienta, każdorazowy kontakt z serwerem jest w 95% przypadków zbędny. Swoją drogą to jakaś obsesja, większość komponentów kalendarzowych ludzie robią ajaksem, tak przynajmniej mówi jsfmatrix.net.</p>
<p>ICEFaces pozwala używać JSF 1.2, ale wymaga używania trybu zgodności ze specyfikacją JSF 1.1. Trochę lipa.<br />
W <code>web.xml</code> trzeba deklarować użycie starej wersji JavaServelts<br />
<br/><code> &lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</code><br/><br/> a w <code>faces-config.xml</code>: <br/><br/> <code>&lt;!DOCTYPE faces-config PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN&quot; &quot;http://java.sun.com/dtd/web-facesconfig_1_1.dtd&quot;&gt; </code></p>
<p>Przez to nie możemy wykorzystać różnych fajnych rzeczy, które wniosło JSF 1.2.</p>
<p>Łatwiej jest testować aplikacje, które używają RichFaces, bo <a href="http://www.jboss.org/jsfunit/">JSFUnit </a> wspiera właśnie to rozwiązanie &#8211; nic w tym dziwnego, gdyż JSFUnita robi RedHat.</p>
<p><strong>Zalety ICE Faces i wady RichFaces </strong><br />
Ok, wygląda na to, że RichFaces wygląda lepiej, ale parę rzeczy w ICE też mi przypadło do gustu. Przede wszystkim wygląd, komponenty są na prawdę dopracowane, wyglądają perfekcyjnie.</p>
<p>Druga rzecz, to sposób odświeżania strony JSF. ICE robią aktualizację wszystkich elementów ajaksowych na całej stronie, dzięki czemu nie musimy się martwić o synchronizację obsługi różnych żądań ajaksowych. W RichFaces trzeba to robić ręcznie, co ma swoje wady.</p>
<p>ICEFaces mają lepiej działającą obsługę ajaksa w trybie &#8220;push&#8221;, RichFaces też to potrafią, ale stosunkowo od niedawna, więc ciężko stwierdzić, na ile ich implementacja działa niezawodnie.</p>
<p>No i wreszcie na koniec ICEFaces dobrze integrują się nie tylko z Eclipse, ale także z NetBeansem (dla mnie to ważne, bo coraz częściej używam tego drugiego).</p>
<p><strong>Decyzja?</strong><br />
Póki co, zdecydowanie RichFaces.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xoft.pl/2008/05/08/icefaces-czy-richfaces-co-wybrac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
