Dobry den,
jak je patrno, tak se asi programovanim v JSF zabyvate, proto bych na Vas
mel konkretni dotazy.
Tak nejak bych do JSF rad vic pronikl, nedelam sice zadny konkretni projekt,
jen si to chci zkouset,
ale uz pri tomto zkouseni, kde resim trivialni ulohy, narazim na, problemy,
ktere by u velkych projektu musely prijit a zatim se mi zdaji jen tezkopadne
resitelne. Jde o to, ze jakmile se clovek odpouta od primitivnich uloh typu
prevodnik jednotek, kterych se vsude po webu valeji tuny, narazim na
problemy efektivnosti co se treba DB dotazu tyka atd. Vse to vyplyva z toho,
ze JSF si ridi tok rizeni samy, a proto vam volaji metody ve chvilich, kdy
to vubec necekate. Ale mozna jsou tyto problemy pouze dusledkem toho, ze to
cele spatne pouzivam (Musim priznat, ze JSF udelaly pokrok od doby co jsem
se s nimy setkal poprve, to mi prisly naprosto nepouzitelne. Ted se uz
alespon daji michat JSTL a JSF tagy a existuje UEL). Prave proto sem pisu.
Ted mi vytanou namysli tyto dva priklady.
1) Kdyz volam nejaky servlet s nejakym parametrem, dejme tomu napriklad
?action=edit, a podle toho provadim akce a plneni objektu, ktere pak ukladam
do map, aby byly k pouziti v jsp strance, tak mi napoprve vse spravne
zafunguje. Jenze v pripade, ze uzivatel spatne vyplni formular a ten pri
pristim requestu neprojde validaci, neprevola se serlvet podle nastaveni v
navigaci, ale zavola se znovu zdroj, ktery se volal naposledy, ale uz bez
parametru. Cili puvodni servlet se uz nedozvi o akci edit a vysledkem je
vykonani uplne jineho kodu, ktery uz nepripravi spravne objekty pro jsp
stranku.
Doufam, ze jsem to popsal srozumitelne. Nasel jsem urcite reseni, ktere
spociva v tom, ze informaci o akci zabuduju do udaju formulare pres tag
hidden, a tudiz zarucim, ze se mi do pristiho requestu zase dostane. To mi
ale prijde to krajne nesikovne. Zvlast kdyz je akce edit vazana na nejaky
konkretni objekt, ktery je identifikovan na urcite id. Pak je treba id
prenaset zrovna tak. Vysledny kod by mohl pak vypadat nasledovne.
<h:form id="helloForm1">
<h:inputHidden id="filmId" value="#{FilmBBean.id}"></h:inputHidden>
<input type="hidden" name="action" value="${param.action}"></input>
<input type="hidden" name="filmId" value="${param.filmId}"></input>
<div><h:outputLabel for="frmNazev">Nazev:</h:outputLabel></div>
<div><h:inputText id="frmNazev" value="#{FilmBBean.nazev}" >
<f:validateLength minimum="5"></f:validateLength>
</h:inputText></div>
<h:commandButton id="submit" action="success" value="Submit" />
</h:form>
</f:view>
2) Na druhy problem jsem narazil v podobe combo boxu. S tim jsem se hodne
nadrel, nez jsem
dokazal vymyslet nejaky kod, ktery by mi dokazal v combu zobrazit data
urcite tabulky z databaze, ja bych jednu vybral a reference na tuto polozku
by se ulozila do tabulky jine. Problem byl v tom, ze JSFka vyzadovaly
informace o ciselniku v combu, vicekrat, nez bych to cekal. Prvni muj
pristup byl takovyto. V servletu v akci edit nactu ciselnik, ulozim ho do
mapy requestu (uplne mimo jakekoli BackingBeany), na jspcku si ho pak tag
vycucne z mapy a zobrazi. Pri uspesnem odeslani formulare se necham v
navigaci odkazat na ten samy servlet, ale s ?action=save, z vyplnene
backingbeany si vytahnu aktualne oznacenou polozku a tu predam do EJB k
ulozeni jeste s jinymi informacemi z formulare.
Jenze problem, JSF neustale hlasily, ze jsem vybral spatnou polozku. Nakonec
jsem zjistil, ze JSF, asi pro validaci, potrebuji znat obsah comba i ve
chvili, kdy ja predpokladam zavolani save akce , takze obsah ciselniku uz
nepotrebuji. A proto v totu chvili muj ciselnik naplneny neni a proto jsf
hlasi chybu validace. Jenze validace probehne jeste pred rozhodovani, na
ktery serlvet (zdroj) se dal preda rizeni, takze ani neni v me moci tento
ciselnik naplnit a do nejake mapy ulozit. Proto se jedinym resenim ukazalo
dat ciselnik do BackingBeany a zpristupnit ho pomoci getMetody a v tagu se
pak odkazovat na tuto metodu. Pri zacatku zpracovani requestu na odeslani
dat formulare si jsfka vytvori instanci teto backingbeany a mohou si opet
pres tuto metodu zjisti obsah ciselniku, porovnat, jestli vybrana polozka je
z tohoto ciselniku a predat rizeni servletu s akci uloz. Nicmene mi tento
dotaz do DB prijde uz jako zbytecny. Navic v mem pripade je pri validaci
tato metoda volana asi 10krat, takze je nutne zajistit mechanismus pouze
jednoho pristupu do databaze a kesovani dat v ramci jednoho requestu -
requestu, pro ktery uz by tento obsah dat nebyl dulezity.
Z meho pohledu tyto problemy vyplyvaji z toho, ze JSF vytvari instance
BackingBean samy a vyuzivaji jejich dat, driv nez ma programator moznost
vhodna data naplnit nebo s nimy nejak pracovat.
Je toto reseni, ktere jsem se snazil nejak srozumitelne popsat pro JSF
bezne, nebo opravdu pouzivam jen zvlastni pristup, ktery vse hodne
zeslozituje.
Omlouvam se za email, ktery se mou snahou vse vysvetlit stal neprimerene
dlouhym :-)
S pozdravem
Vojtech Ouska
24.9.07, Stöhr Miroslav RNDr. Ph.D. <[EMAIL PROTECTED]>:
>
> Nedomnívám se že programovat v JSF je složité. Není snadné v něm začít
> programovat, to ano. Ale jakmile na to příjdeš, už to složité nebude,
> naopak, třeba Struts ti příjdou zbytečně složité a nepřehledné a
> neobjektové.
>
> Na rozdíl od spousty lidí prostě na JSF nedám dopustit :-)) Nejsou
> dokonalé, neřeší spoustu věcí, ale rozhodně to byl krok směrem vpřed. Ne že
> by nebyly potřeba další kroky, viz. třeba jBoss Seam (ale ten opravdu ještě
> nedozrál k použitelnosti na větším projektu).
>
> A na vizuální programování je třeba zapomenout, osobně si myslím že to
> není dobrá cesta. Klidně mě kamenujte, ale názor nezměním. Není nad ruční
> editaci zdrojového kódu.
>
>
> Mirek
>
>
> ------------------------------
> *From:* [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Pavel Zelenka
> *Sent:* Friday, September 21, 2007 5:24 PM
> *To:* Java
> *Subject:* RE: Výhody JSF
>
>
> Díky, za přínosný komentář. Právě ta složitost programování v JSF mě
> odradila. Každopádně asi začnu nejprve s tím STRUTS. Je to celkem rozšířené,
> takže to asi bude k něčemu dobré.
>
> Ještě jednou díky.
>
>
>
>
> *Belák Václav <[EMAIL PROTECTED]>*
> Odeslal: [EMAIL PROTECTED]
>
> 21.09.2007 17:10 Odpovězte prosím uživateli
> Java <[email protected]>
>
> Komu
> "Java" <[email protected]> Kopie
>
> Předmět
> RE: Výhody JSF
>
>
>
>
>
>
> Dobrý den,
>
> výhodou je jistá přehlednost ve větších projektech, neboť psaní aplikací v
> Servletech je děsně ukecané, JSP zase nejsou nejpřehlednější a u obojího
> neustále píšete dokola ten samý kód generující HTML. To bylo nejprve řešeno
> Struts, které zavedly knihovnu tagů generující obvyklé prvky HTML stránky,
> jakož i (Struts) umožnily realizovat slušnou MVC architekturu, kde JSP coby
> prezentační vrstva skutečně pouze prezentuje data.
> JSF jsou jakýmsi „evolučním" krokem směrem dále ke komponentové
> architektuře, kde tagy generují nikoliv pouze HTML prvky (jako např. input
> field apod.), ale také kompletní kusy stránek, jako je např. kalendář, nebo
> tabulka. Jednou z idejí je pak to, že těmito komponentami pak bude možné
> stránku tvořit vizuálně tak, jako je tomu u Swing, nebo v prostředí .NET. Ty
> uvozovky jsou tam z toho důvodu, že evoluce se stala dle mnohých trochu
> „devolucí", neboť model programování v JSF je velmi složitý. To se snaží
> řešit projekty jako Oracle ADF, nebo i jBoss Seam – ten posledně jmenovaný
> je však zatím dle mnohým málo vyzrálý a nejsou pro něj dostupné tak kvalitní
> nástroje pro vizuální editaci stránky, jako pro Oracle ADF a jejich
> JDeveloper – ty však zase nejsou zdarma.
> Pokud vás komponentový přístup k tvorbě webu v Javě zajímá, tak se zkuste
> podívat na odlehčené alternativní přístupy, jako je např. Apache Tapestry,
> nebo Apache Wicket.
>
> S pozdravem,
>
> Vašek Belák
> ------------------------------
>
> *From:* [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Pavel Zelenka*
> Sent:* Friday, September 21, 2007 4:40 PM*
> To:* Java*
> Subject:* Výhody JSF
>
>
> Jsem v Javě začátečník. Začal jsem tvořit webové aplikace dle vzoru MVC
> tj. servlety + JSP. Přečetl jsem si nějaké informace o JSF, ale nějak
> nedokážu pochopit v čem je přínos JSF. Zdá se mi to strašně složité. Proto
> bych potřeboval poradit od zkušenějších, v čem je přednost (je-li nějaká)
> JSF oproti servletům + JSP. Díky.
>