středa 4. dubna 2007

JSF & Facelets

Samotné JavaServer Faces (JSF) je ve své podstatě jednoduchý framework na view vrstvu, který komunikuje pomocí Backing Beans. JSF v žádném případě neruší metodiky JSP-Servletů, pouze je potlačuje ve prospěch vývojářů a snaží se nabídnout alternativu pomocí JSF.

V JSF je několik vlastností (zejména uvnitř faces-config.xml), které jistě stojí za to prozkoumat:

  • Navigace

  • Lokalizace a vlastní definice messages

  • Definice managed-beans (request, session) ...

  • Psaní HTML komponent v pomocí jsf/html

  • Tvorba vlastních UI komponent



Pro vývojáře, kteří mají s podobnými typy frameworků již zkušenosti, jistě není problém se JSF doučit. Ve chvíli, kdy je pro Vás jsp-servlet nový pojem, doporučuji rovnou začít na JSF. Samotná metodika Vás nakonec stejně donutí se jsp-servlety částečně doučit.

Když to vezmu do důsledků, tak jako vývojář v PHP jsem měl k jakýmkoliv frameworkům odpor. Ne snad z toho důvodu, že bych si raději všechno psal sám, ale z toho důvodu, že jsem nikdy nevěřil, že ten či onen framework bude i nadále podporován a že mi poskytne komplexní řešení.
U JSF je situace jiná. Samotný framework (stejně jako např. JavaPersistence API), je standardem SUNu, což samo o sobě dává pocit jakési jistoty, že se samotné API neučím nadarmo. Mám jistou záruku, že bude více využíván, dále podporován, či na něm budou postaveny další implementace, které se budou snažit dodržet standard a k tomu použiji své vlastní rozšíření.
Takovouto podobnost mohu nalézt např. mezi JPA a Hibernate, kde Hibernate se stalo plně kompatibilní s JPA a navíc nabízí vlastní rozšíření (např. CriteriaAPI).

Abych jen neházel samou chválou, přece jen mně na JSF trochu vadila jedna věc a to je "šablonovací systém". Nebo chcete-li, možnost, kdy budu vkládat své stránky do stejné "formičky".

Nakonec jsem našel "Facelets", což je v podstatě rozšíření samotného JSF, které je ovšem zaměřeno právě na šablonovací systém. Samotný popis lze nalézt zde.
Pro NetBeans existuje i vlastní plugin, který je popsán zde.

Takže pokud někdo začíná s webovými aplikacemi v Jave, doporučuji JSF-EJB3-JPA. I když není Java EE 5 zrovna jednoduchá záležitost (alespoň pro mě), tak stojí za to alespoň nahlédnout, jak vlastně taková architektura vícevrstvé aplikace (z pohledu Javy), vypadá.

Na webu Jakuba Vrány o PHP, se někteří lidé domnívali, že URL v JSF je statická. Na malý problém existuje malá náplast a tou je "" v navigation-case. Stejnou fintu je třeba použít, pokud budu tvořit zabezpečenou aplikaci přes url-pattern (/secure/*) v security-constraint.

4 komentáře:

  1. Někteří lidé jsme i já? Jestli jo, tak bych to rád upřesnil. Nemluvil jsem o JSF obecně, mluvil jsem o konkrétní vyscaffoldované aplikaci, která tímto zjevně trpěla.

    A mám ten dojem, že proto, že je mnohem jednodušší udělat takto použitelnou aplikaci alá IDOS (ten je sice v ASP.NET, ale to je prašť jako uhoď) a nějaká navigace se zpravidla dělá až nakonec jako takový bonus. Není to tak?

    OdpovědětVymazat
  2. V te chvili mi prislo, ze jste mluvili o tom, jak je to spatne. Kdyz uz neco takoveho napisi, je dulezite uvezt veci na pravou miru. Demo tutorialy slouzi jen k ukazkam. Psal jsem o tom celou dobu. To je to same, jako neexistence sablony, kde bych musel ke kazdemu souboru pripojovat cssko.
    To same se tyka rozdeleni aplikace. Kdyz bych chtel pouzit business logiku ve forme EJB, tak ji zde vlastne nemam implemenovanu. Duvodem je to, ze je to DEMO.
    No, nemyslim, ze by se delala az na konec. Zalezi v jakem projektu. Jelikoz se navigace definuje v XML souboru, mas samozrejme moznost to jednoduse a kdykoli menit. Jedna vec je staticka navigace a druha dynamicka (generovane menu, atd.). Ja tedy navigaci implementuji hned. Duvodem je i testovani a zapsani, kam vlastne ten ci onen odkaz smeruje :)
    Jinak, abych jen netvrdil jak je to super. Ten redirect je trochu osemetnej. Jak jsem psal, pri zapezpecovani aplikace na nejaky adresar, musim dat bacha, jak se do nej budu dostavat. Kdyz byt totiz poslal normalni commandLink a v navigation-case nezohlednil redirect, tak se na tu stranku dostanu, aniz bych melopravneni! Duvodem je i to, ze je takovy link poslan pres POST. Tohle me docela vadi. Mozna existuje zpusob, jak to obejit, ale ja na nej neprisel.

    OdpovědětVymazat
  3. Ten redirect je trochu osemetnej. Jak jsem psal, pri zapezpecovani aplikace na nejaky adresar, musim dat bacha, jak se do nej budu dostavat. Kdyz byt totiz poslal normalni commandLink a v navigation-case nezohlednil redirect, tak se na tu stranku dostanu, aniz bych melopravneni!

    To je samozrejme uplna kravina, aneb deklarativni rizeni pristupu skrze role.. a Java 5 s anotacemi to posunula opet o notny kus dale... - staci si jen patricne oblasti nastudovat...:)

    OdpovědětVymazat
  4. Kravina to bohuzel neni. Uprimne, je jasne, ze kdyz budu tvorit vetsi projekt, budu pozadovat nejake nastroje na autentifikaci a autorizaci.
    To ovsem nic nemeni na faktu, ze samotny JSF se svym POST je proste silenost.
    Ja se zde nebavim (nebavil), o tom, co by se melo pouzit. Pouze o tom, ze kdyz pri obycejnem "testovacim" zabezpeceni neco takoveho udelam, musim pocitat s timto problemem.

    OdpovědětVymazat

Když programátor založí a řídí firmu

Jako malý jsem chtěl být popelářem. Ani ne tak proto, že bych měl nějaký zvláštní vztah k odpadkům, ale hrozně se mi líbilo, jak...