Ak už máme vytvorenú komponentu JavaBean, určite s ňou potrebujeme nejakým spôsobom komunikovať. Odovzdávať jej parametre a naopak preberať výsledky, ktoré môžeme ešte spracovať, alebo priamo vložiť na stránku. Dnes budeme hovoriť o nastavovaní a čítaní vlastností JavaBeanov a o podmienenom vytváraní komponentov.

Na úvod si musím splniť jednu podlžnosť. V minulom článku som nepovedal, kde vlastne JavaBeany umiestňujeme. Teraz nemyslím na stránke JSP, ale priamo javovské *.class súbory. Skutočné umiestnenie týchto súborov závisí od príslušného aplikačného servera, ktorý používate. Pokiaľ sa pozrieme na Tomcat 4.0.4, tak všetky JavaBean triedy pre príslušnú aplikáciu sa umiestňujú do adresára „CATALINA_HOME/webapps/moja_aplikacia/WEB-INF/classes“. Samozrejme zdrojový kód JavaBeanu (napr. mojBean.java) treba najprv skompilovať.

Ak ste si stiahli a nainštalovali iba JRE – Java Runtime Environment, žiadny zdrojový kód neskompilujete. Podrobnejšie vysvetlenie tohto problému nájdete v druhej časti nášho seriálu. Ak máte nainštalované a nakonfigurované SDK – Software Development Kit pre Javu, s kompiláciou by nemal byť problém. Pre bližšie informácie si prejdite ešte raz druhý článok alebo java.sun.com.

Nastavovanie vlastností JavaBeanov

Pre nastavenie vlastností sa používa akcia jsp:setProperty, ktorá má niekoľko atribútov – znak „|“ (pipe, Ctrl_Alt_W) znamená, že máte na výber viac možností:

  • name: Pomocou tohto atribútu sa odvoláte na konkrétnu komponentu. Na jednej stránke môže byť totiž vytvorených niekoľko inštancií rôznych JavaBeanov, pričom každá má jedinečné id. Takže ak chcem nastaviť nejakú vlastnosť JavaBeanu s id = "myBean" potom name = "myBean". Tento atribút akceptuje buď pevný reťazec alebo výraz JSP (<%= výraz %>), ktorý sa vyhodnotí v čase požiadavky na stránku.
  • property: Je názov vlastnosti, ktorú chcete nastaviť alebo zmeniť. Názov tejto vlastnosti musí odpovedať metóde setXxx() v príslušnom JavaBeane. Atribút property akceptuje len pevne zadané reťazce, nie výrazy JSP.
  • value: Toto je hodnota, ktorú chcete nastaviť pre danú vlastnosť, určenú pomocou property. Tento atribút akceptuje ako pevné reťazce tak aj výrazy JSP.
  • param: Používa sa ako náhrada za value pri problémoch s rôznymi dátovými typmi. Bližšie objasním jeho význam nižšie.

<jsp:setProperty name = „myBean | <%= výraz %>“
   property = „someProperty“
   value = „string | <%= výraz %>“ | param = „parameter“ />

Velmi často sa vlastnosti JavaBeanov nastavujú s využitím implicitného objektu request, ktorý poskytuje metódu getParameter(). Pričom parameter je atribút name HTML elementu. Napr. máme stránku form.htm:

<form action=“test.jsp“>
   <input type=“text“ name=“meno„>
   <input type=“submit“ name=“potvrd“ value=“OK“>
</form>

Po zadaní textu do poľa meno a kliknutí na OK sa zavolá stránka test.jsp:

<%@ page language = „java“%>
<%@ page contentType=“text/html“%>
<%@ page import=“Bean“ %>
<jsp:useBean id=“myBean“ scope=“page“ class=“Bean“/>
<jsp:setProperty name=“myBean“ property=“meno
 value=“<%= request.getParameter(„meno„)%>“/>

Samozrejme, že uvádzam len to podstatné zo stránky. Na príklade vidíte, že atribút value vlastnosti meno napĺňam pomocou výrazu <%= request.getParameter("meno")%>. Pri požiadavke na stránku sa teda nastaví vlastnosť meno v beane myBean. Zdrojový kód beanu je nasledovný:

public class Bean {
   private String meno;
   public void setMeno(String meno) {
     this.meno = meno;
   }
}

Tento bean nespraví zatiaľ nič iné, len nastaví hodnotu privátnej premennej meno na hodnotu, ktorú ste zadali do formulára meno. V tomto mechanizme je jeden háčik. Metóda getParameter() vracia vždy String. Lenže my môžeme potrebovať nastaviť vlastnosť, ktorá je iného dátového typu ako String. Obvykle by sa to riešilo pretypovaním, ale tento spôsob je trochu nepraktický. JSP nám naštastie ponúka jednoduchý spôsob, ako to vyriešiť.

Ten spôsob je ďalší parameter akcie jsp:setProperty, ktorý sa volá param. Tento atribút prepojí vlastnosť JavaBeanu s parametrom požiadavku a automaticky vykoná správnu konverziu dátového typu String na skutočný dátový typ vlastnosti. Atribút param sa používa namiesto atribútu value.

<jsp:setProperty
  name = „myBean“
  property = „vlastnost“
  param = „parameter“ />

Získavanie vlastností JavaBeanov

Ak potrebujete získať hodnotu nejakej vlastnosti združenej s JavaBeanom, máte k dispozícii akciu jsp:getProperty, ktorá má dva atribúty name a property.

<jsp:getProperty name = „myBean“ property = „vlastnost“ />
<%= myBean.getVlastnost(); %> // ekvivalent predchádzajúceho zápisu

Treba si uvedomiť, že hodnota vlastnosti sa vloží na to miesto do stránky, kde sa zavolá. Ak však potrebujeme s hodnotou ešte manipulovať, vložiť do cyklu alebo podmienky, musíme použiť priamy prístup k vlastnosti cez metódu getVlastnost().

<% String s = myBean.getVlastnost(); %>

Automatické združenie vlastností so vstupnými parametrami

Toto je veľmi užitočná vec. Spočíva v tom, že nemusíte postupne zlučovať vstupné parametre s vlastnosťami. Jediné čo treba urobiť je nastaviť atribút property = "*".

<jsp:setProperty name = „myBean“ property = „*“ />

Toto zabezpečí, že JSP engine prevezme všetky vstupné parametre z objektu request a zlúči ich s príslušnými vlastnosťami JavaBeanu. Samozrejme musí byť zachovaná menná konvencia. Teda ak vstupný parameter je napr. customer, potom bean musí obsahovať metódu setCustomer().

Podmienené vytváranie komponentov

V podstate ide o určenie, za akých podmienok sa vytvorí nová inštancia JavaBeanu. V prípade zdieľania beanov platí, že akcia jsp:useBean spôsobí vytvorenie novej komponenty len vtedy, ak sa nenájde žiadna iná komponenta s rovnakým id a scope. Ak sa nájde takáto komponenta, potom sa prepojí s premennou, na ktorú odkazuje id.

Namiesto akcie <jsp:useBean ... /> môžete používať <jsp:useBean ...> príkazy </jsp:useBean>. Rozdiel je v tom, že príkazy medzi začiatočným a ukončovacím elementom sa vykonajú len vtedy, ak sa vytvára nová komponenta. Ak sa použije už existujúca komponenta, príkazy sa nevykonajú. Toto sa používa hlavne na úvodnú inicializáciu beanu.

<jsp:useBean id = „myBean“ class = „Bean“ scope = „application“>
 <jsp:setProperty name = „myBean“
  property = „numOfCustomers“ value = „<%= numberOfCust %>“ />
</jsp:useBean>

Na záver vám ponúkam možnosť vyskúšať si príklad on-line.

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

Odpovědět