Tabulka v Javě

Ahoj, jmenuji se Lukáš a napsal jsem si tabulku. Opravdu, v dnešní době frameworků, knihoven a jiných hotových řešení jsem se neudržel a podlehl jsem pokušení napsat si tříditelnou, filtrovatelnou a stránkovatelnou tabulku. Jenom tak, jen s pomocí JSP a Springu. I když je to neodpustitelná hloupost, pokusím se o chabou obhajobu.

Asi bych začal tím jak to všechno začalo. Píší docela zajímavou aplikaci a v analýze jsem narazil na to, že si zákazník přeje prohlížet audit log uložený v databázi. Takže v celé aplikaci je jenom jedna tabulka. Navíc mám za vzor aplikaci pro stejného zákazníka, kde už je hotový layout, styly a i vzor JSP. Nabízejí se následující řešení

Pozměnění existujícího řešení

Touto cestou jsem se vydal. Nicméně stávajícímu řešení jsem příliš nerozuměl, nenaplňovalo moje požadavky a neodolal jsem nutkání si ho vylepšit. Takže nakonec zůstala zachována jenom kostra JSP stránky. Tudíž se to rovná napsání si od píky něčeho, co by už dávno mělo být nějak standardizováno. Trvalo mi to sice jenom asi půl dne, ale nepochybuji, že v .NETu by to nebylo na víc než na půl hodiny.

Použití knihovny

Řešení, nad kterým jsem uvažoval, ale nepovažoval jsem ho za nutné kvůli jedné hloupé tabulce. Podívejme se na to co se nám pro Javu nabízí.

Displaytag

Displaytag je osvědčená knihovna určená pro zobrazování tabulek. Má ale problém s rozsáhlými daty. Standardně provádí stránkování a třídění v paměti. To v mém případě nepřichází v úvahu, protože log bude mít záznamů opravdu hodně.

Valuelist

Valuelist byla moje oblíbená knihovna. Implementuje design pattern valuelist a je přímo dělaná na rozsáhlá data. Pěkné na ní je to, že umožňuje pomocí konfigurace nastavit čtení dat přímo z databáze a to v případě potřeby i za použití Hibernate. Sice tím porušujeme rozdělení na vrstvy, ale na malé aplikace nebo prototypy k nezaplacení. Její nevýhodou bylo to, že nebyla příliš rozvíjena. Nicméně vypadá to, že se situace zlepšila a nějaký vývoj přece jenom probíhá. Tuto knihovnu jsem nepoužil jenom proto, že ji nazná nikdo z kolegů, což je z pohledu dalšího vývoje problém. Ale pokud hledáte pro komponentu na vykreslení tabulky, doporučuji vzít Valuelist v úvahu.

Extremecomponents

Extremecomponents je knihovna, kterou používáme u nás ve firmě. Má jednu velkou nevýhodu, neznám ji já. Odhadl jsem tedy, že si to sám napíši rychleji, než se ji naučím.

JSF

Kromě toho že to je řešení stylu kanónem na vrabce, nejsem si jistý, jestli existuje rozumná, lehce dostupná komponenta, který by splňovala všechny požadavky. Navíc křivka učení JSF je opravdu hodně strmá. Kvůli jedné tabulce se mi po ní šplhat nechtělo.

Co z toho všeho plyne? Prostě mi v Javě chybí všeobecně uznávané a známé řešení tohoto jednoduchého a standardního problému. Zatímco existuje spousta knihoven, které umějí snadno a rychle tabulku vykreslit, pro nižší vrstvy je řešení necháno na tvořivosti programátora. Neznám žádný standard na to jak předávat hodnoty filtru, stránkování a třídění. Proto si každý více či méně úspěšně píše třídy na to, aby uměl business logice říci, že chce záznamy 10-19, takové které jsou z letošního roku a mají typ 8. To je podle mě škoda, je to problém, který programátoři řeší denně.

5 Responses to “Tabulka v Javě”

  1. Lukas Says:

    Ja mam s displaytag knihovnou dobrou zkusenost. Je pravda, ze jsem nepotreboval strankovat velkou kolekci. Nicmene jsem nedavno narazil na dalsi tabulkovou knihovnu jMesa (http://code.google.com/p/jmesa/). Zatim jsem nemel moznost ji vyzkouset, ale zkus se podivat do dokumentace. Mozna ze takove strankovani podporuje.

  2. Lukas Says:

    Co treba tohle: http://code.google.com/p/jmesa/wiki/LimitExample

  3. petrst Says:

    Podobnou zkusenosti jsem prosel pred rokem. Displaytag a value list jsem postupne vyloucil a skoncile jsem taktez u vlastni implementace. V mem pripade byl vyber ztizen tim, ze nepouzivam JSP ale Velocity.

  4. Petr Klemšinský Says:

    Zhruba pred rokem jsem se dostal k jednomu vyzkumnemu projektu kde se resilo prave strankovani v J2EE aplikacich (clovek by neveril co se za tim skryva vedy). Cilem bylo vybrat framework ktery se bude jednoduse pouzivat a bude zvladat vetsi mnozstvi dat. Resilo se to pomoci Displaytagu s tim, ze se provadelo caschovani na ruznych vrstvach aplikace. Bohuzel si nepamatuju ktera trida se o tohle stara, ale da se rozsirit tak, ze do pameti nahrava data po castech, pricemz navenek se tabulka chova jak kdyby mela pristup ke vsem datum. To jenom pro zajimavost kdyby se o to chtel nekdo vic zajimat.

  5. Lukáš Křečan Says:

    To Petr Klemšinský> Mate pravdu, navic v nove verzi Dsiplaytagu snad uz i velke result sety podporuji.