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.
Varianta 1 je mnohem jednodušší na implementaci (a také méně náchylná k
chybám, řekl bych), ale zase bude každá změna parametrů vyžadovat
"rekompilaci" aplikace, což je poněkud nepohodlné.
Omlouvám se za dlouhý e-mail a doufám, že se najde někdo, kdo mi otevře
oči a poradí mi nějakou elegantní metodu, která mě nenapadla.
Děkuji za pozornost a přeji hezký den.
dond
--
David Ondřich <[EMAIL PROTECTED]>, ICQ# 165542353, +420608101363