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 ______________________________________________________________________
