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

Odpovedet emailem