On Thursday 30 of March 2006 15:20, David Ondřich wrote:
> Dobrý den všem,
>
> mám dotaz, který je trochu OT, ale souvisí s webovou aplikací, kterou
> připravuji. Prezentační vrstva je psaná v JSF (bez možnosti změny
> frameworku) a sestává kromě JSF také z poměrně rozsáhlé "klientské"
> části, kterou představuje JavaScriptový kód.
>
> Aplikace je poměrně propracovaná a klientská část interaguje s JSF
> mnohými způsoby, z nichž většina vychází z připraveného frameworku.
> Jedna z věcí, která se mi v těch hotových knihovnách nelíbí a chci (a
> mohu) ji změnit, je předávání informací mezi JSF a skripty. Jednak je
> potřeba předávat nějaká data, jednak především definovat chování
> aplikace (tj. navěsit na DOM prvky ovladače událostí apod.). Většina
> těchto spojovacích bodů - zejm. identifikátory ve výsledném HTML - je
> zakódovaná natvrdo, tj. v JavaScriptu i v JSP (nebo ještě hlouběji) je
> uveden příslušná hodnota dvakrát.
>
> To je samozřejmě často kritizováno (právem) jako problematické místo,
> které ztěžuje další údržbu kódu. Jsem si toho vědom, ale ani po několika
> dnech přemýšlení se mi nedaří vymyslet řešení, které by se mi líbilo.
> Prosím tedy všechny zúčastněné o postřehy a rady, případně zkušenosti,
> jak problém vyřešit. Ačkoliv je to trochu OT, doufám, že nebudu vykázán,
> protože se jedná myslím o obvyklý problém webových aplikací, které tvoří
> nemalou část vývojařiny v Javě. Pokud by se to přesto administrátorům
> nelíbilo, odpovídejte prosím přímo na mou adresu ([EMAIL PROTECTED]).
>
> Napadly mne dva hlavní směry, kterými je možné se ubírat.
>
> 1) Hodnoty (vesměs jsou to řetězce, nebo se dá vymyslet jednoduchá
> de/serializace) zapíšu do konfiguráku (nebo přímo do antího skriptu) a
> při překladu je promítnu jednak do konfiguračních souborů webové
> aplikace, jednak přímo do .js souborů (případně do JSP stránek).
>
> 2) Hodnoty napíšu do konfiguračního souboru webové aplikace a do JSP
> stránek je budu vkládat standardně. JavaScript nechám stahovat přes
> vlastní servlet definovaný v aplikaci a budu ho při serverování
> filtrovat a hodnoty dosazovat z konfiguračního souboru.
>
> Varianta 2 se mi líbí více, ale má tu nepříjemnou vlastnost, že se
> JavaScript bude při každém refreshnutí aplikace stahovat znovu. Vzhledem
> k tomu, že je ho poměrně hodně, musel bych buď v servletu ohlídat, zda
> se chování klienta má změnit a podstrčit mu nový .js, nebo zda se nic
> nezměnilo a odpovědět správnou HTTP hlavičkou, že má použít ten, co má v
> cache. Anebo bych musel skripty rozdělit a vytvořit jeden,
> "konfigurační", který bude obsahovat jenom nějakou mapu všech hodnot,
> bude malý a nebude vadit, že se stahuje stále znovu.

Ja osobne bych na to sel trosku statictejsi podobou 2) - vsechny potrebne 
konstanty mit v jednom rozhrani (typicky Constants.java) a trivialnim 
xdocletem z nich vygenerovat eqivalentni JavaScript, ktery bude normalne 
ulozeny mezi ostatnimi JavaScripty a bude se vkladat na prvnim miste do kazde 
stranky. Samozrejme ze pro JSF by to asi krome rozhrani chtelo jeste 
xdocletem vygenerovat beanu s gettery konstant, ktery bude nejak vlozen do 
kazde stranky.

Je to takto resitelne? Nerikam, ze je to zrovna elegantni, ale podobny zpusob 
jsem pouzival, kdyz jsem mel Cckovy server a Javiho klienta. Napsat generator 
hlavickovych souboru s #define xdocletem byla otazka dvaceti minut.
-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
http://www.buchtovi.cz

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________

Odpovedet emailem