20 maja 2007

HTML na stronach JSP dla technologii JSF czyli biblioteka HtmlLib

JSF zakłada z goła inny model tworzenia interfejsu użytkownika niż ten znany z technologii takich jak Servlety czy JSP. Co prawda tworząc strony JSF typowo posługujemy się technologią JSP, ale jest to już inne podejście. Tworzenie strony DHTML, bo ostatecznie wszystko się do tego sprowadza, nie ma już być mozolnym rzeźbieniem. JSF to komponenty a JSP jest tylko pewnym sposobem zdefiniowania ich wzajemnego zawierania i atrybutów. Jak to jednak bywa z nowymi pomysłami i technologiami ciężko jest się do nich przyzwyczaić, przestawić swój tok myślenia i zarzucić wszystko to co choć stare i słabe to jednak dobrze znane. Nade wszystko, te nowe technologie miewają także wady, w pewnych zastosowaniach są po prostu gorsze. Ale do rzeczy. Stanąłem dziś przed problemem stworzenia strony JSP dla JSF takiej, która wyświetlałaby obiekt currentItem z zastosowaniem następującego formatowania:

currentItem.name

currentItem.picture

currentItem.description


Stosując stary dobry HTML na starej dobrej stronie JSP użyłbym tabeli. Mogłoby to wyglądać jakoś tak:

<table>
<tr>
<td>
${currentItem.name}
</td>
<td rowspan=”2”>
${currentItem.picture}
</td>
</tr>
<tr>
<td>
${currentItem.description}
</td>
</tr>
</table>

No dobrze, ale my z wielu powodów nie możemy użyć wprost elementów HTML. Przynajmniej nie zawsze. Z chęcią poznam zgrabne rozwiązanie powyższego problemu przy użyciu standardowych komponentów JSF, a póki co zaproponuje co innego. Rozwiązania standardowego nie poszukiwałem długo i wytrwale, bo bardzo szybko znalazłem rozwiązanie polegające na użyciu biblioteki HtmlLib. Mała rzecz a cieszy. Jest to po prostu implementacja HTML dla JSF. Biblioteka ta zawiera znaczniki HTML zaimplementowane jako komponenty JSF. Wystarczy pobrać plik htmlLib.jar ze strony http://jsftutorials.net/htmLib/, dodać go do bibliotek projektu i gotowe. Deklaracja biblioteki znaczników na stronie JSP wygląda następująco:

<%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm" %>

Możemy teraz używać wszystkich elementów standardowego HTML’a, wystarczy poprzedzić je zakresem przestrzeni nazw htm. Rozwiązanie powyższego problemu, w pełni zgodne z JSF będzie więc wyglądać następująco:

<htm:table>
<htm:tr>
<htm:td>
<h:outputText value="#{currentItem.name}" />
</htm:td>
<htm:td rowspan="2">
<h:outputText value="#{currentItem.picture}" />
</htm:td>
</htm:tr>
<htm:tr>
<htm:td>
<h:outputText value="#{product.productDescr}" />
</htm:td>
</htm:tr>
</htm:table>

1 komentarz:

Krystian Matysiak pisze...

zamienił stryjek siekierkę na kijek