Akčné značky sú pomerne rozsiahlou kapitolou v technológii tvorby dynamických stránok JSP. Obsahujú dve základné oblasti: JavaBeans a Dynamické vkladanie súborov a apletov na stránky. Tentoraz si povieme niečo o JavaBeanoch.

JavaBeans

JavaBean je špeciálny typ triedy, ktorá musí dodržiavať určité pravidlá:

  1. Trieda musí mať konštruktor bez parametrov – prázdny konštruktor.
    Túto požiadavku je nutné splniť buď priamo zadaním takého konštruktora, alebo vynechaním všetkých konštruktorov, vďaka čomu prekladač automaticky vytvorí konštruktor bez parametrov.
  2. JavaBean nesmie mať žiadne verejné (public) premenné inštancie.
    Táto zásada by mala platiť nielen pri JavaBeanoch ale aj pri programovaní ostatných Java tried. K premenným inštancie treba pristupovať zásadne cez prístupové metódy, ktoré vám umožňujú definovať obmedzujúce podmienky, kontroly, filtre atď.
  3. K perzistentným hodnotám treba pristupovať cez metódy setXxx() a getXxx().
    Toto je pravidlo týkajúce sa konkrétne JavaBeanov. Napríklad máte triedu Customers a v nej metódy setNumOfCustomers() a getNumOfCustomers(), pomocou ktorých nastavujete a získavate počet zákazníkov. V tomto prípade sa potom povie, že trieda Customers má vlastnosť numOfCustomers. Všimnite si malého písmena „n““ v názve vlastnosti, ale veľkého „N“ v názve metódy. Ak má trieda len metódu getXxx(), ale nemá odpovedajúcu metódu setXxx(), hovoríme, že vlastnosť xxx je len na čítanie.
       Existuje výnimka v tejto konvencii, a to pri triedach s vlastnosťami typu boolean. Tieto triedy používajú pre získanie hodnôt takejto vlastnosti metódu nazvanú isXxx() namiesto getXxx().
       Inak môžete použiť aj výrazy a skriptlety JSP na prístup k iným pomocným metódam JavaBeanov. Štandardné akcie na prístup k vlastnostiam môžu využívať iba metódy setXxx() a getXxx()/isXxx().

Zavedenie JavaBeanov

Aby ste mohli na stránke JSP využívať služby JavaBeanu, musíte ho najprv zaviesť do pamäte. Najjednoduchšou a zároveň povinnou syntaxou na zavedenie beanu je:

<jsp:useBean id=“name“ class=“package.Class“/>

Znamená to: „Vytvor inštanciu triedy špecifikovanú parametrom class a priraď ju k premennej špecifikovanej parametrom id.“ Predchádzajúci zápis sa teda môže nahradiť ekvivalentom skriptletu:

<% package.Class name = new package.Class(); %>

Avšak akcia jsp:useBean má ďaleko viac možností:

<jsp:useBean id=“name“ class=“package.Class“ scope=“page|request|session|application“ type=“package.Class“ beanName=“package.Class“ />

Musím upozorniť, že jsp:useBean používa syntax založenú na XML. Preto názvy atribútov sú citlivé na malé a veľké písmená, musia sa použiť buď jednoduché alebo zdvojené úvodzovky a koniec značky je />, nie iba >. Miesto atribútu class môžeme použiť beanName, pričom rozdiel spočíva v tom, že beanName sa vzťahuje buď na objekt triedy alebo na súbor obsahujúci serializovaný objekt triedy. V prípade, že potrebujete, aby vytváraná inštancia beanu bola typu, ktorý je predkom skutočného typu beanu alebo rozhrania, ktoré implementuje, môžete využiť atribút type. Atribút scope určuje spôsob zdieľania JavaBeanov medzi stránkami. To znamená, že viac stránok môže využívať jednu inštanciu beanu.

JavaBeans sú obvykle spojené s lokálnymi premennými v metóde _jspService(). Ale zároveň môžu byť uložené na jednom zo štyroch rôznym miest, v závislosti od hodnoty atribútu scope. Sú možné tieto štyri hodnoty:

  • page: Táto hodnota atribútu scope je implicitnou hodnotou. Spôsobí, že inštancia beanu sa uloží do objektu PageContext po dobu trvania aktuálnej požiadavky. Servletový kód potom môže pristupovať k inštancii prostredníctvom metódy getAttribute() preddefinovanej premennej pageContext.
  • request: Táto hodnota znamená, že bean sa uloží do objektu ServletRequest združeného s aktuálnou požiadavkou, kde je dostupný cez metódu getAttribute().
  • session: Táto hodnota znamená, že inštancia beanu sa uloží do objektu HttpSession a je dostupná cez metódu getAttribute() preddefinovenej premennej session.
  • application: V tomto prípade sa bean uloží do zdieľaného ServletContext a bude dostupný cez premennú application pomocou metódy getAttribute(). Tento objekt je zdieľaný v celej webovej aplikácii, prípadne medzi všetkými servletmi, ak nie sú explicitne definované žiadne webovské aplikácie.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět