Po zdravé úvaze jsem se rozhodl přejít na tuto verzi a provést úpravy na stávajícím projektu, který byl psán pro verzi 1.3.x.
Hlavní rozdíly oproti starší verzi
Jak jsem již zmínil, hlavní změnou je podpora generických typů. Bohužel došlo i na změnu v API. Metoda "getModel()" či "getModelObject()" byla nahrazena "getDefaultModel...". Směle jsem se tedy pustil do přeměny pomocí hromadného přepisu (cca 50 výskytů). Naštěstí byla tato změna dostatečná a aplikace je plně kompatibilní s verzí 1.4.
Využitelnost generik
Na jedné straně jsem jásal, že je konečne wicket více typově kontrolovatelný a nemusí docházet k ruzným přetypováním. Na druhou stranu je ovšem dobré poznamenat, že jsou pasáže (viz např. DropDownChoice), které jsou dost neštastně navrženy pro využití generických typů. Problém spočívá zejména v tom, že musím napsat tunu kódu navíc, která nepřináší až tak závratné změny.
Po zhruba měsíční migraci jsem omezil použití generických typů jen na místa, kde to skutečně má smysl (viz např. IModel).
Komponenty třetích stran
To, že je ve Wicketu tvorba znovupoužitelných komponent, hračka, je nepopíratelný fakt. Komponenty třetích stran se tedy spíše soustředí na složitejší věci. Bohužel, v současné době jsem nabyl dojmu, že je vývoj dost chaoticky či vůbec neřízen. Použít některou přídavnou vlastnost z WicketStuff je sázka do loterie. Pokud bych toto porovnal s JSF, je na tom Wicket naprosto žalostně.
Osobně využívám následující přídavné vlastnosti:
- wicket contrib javaee 1.1 - podpora pro injectování EJB komponent
- swarm 1.4, wasp 1.4 - pro podporu security management
- grid - jedná se o "rich" tabulky; kdysi byl projekt vystaven na inmethod.com, poté byl zrušen; pohužel jsem musel udělat vlastní úpravy, aby daná komponenta byla vůbec funkční
Zbylé "projekty" jsem po zběžném otestování raději zahodil. Mrzí mě, že například podpora pro jQuery je dost nestabilní a její použití je dost invazivní (viz. nutnost použít pro Application daného předka, což znemožňuje využít zase například Swarm).
Pokud má někdo zkušenosti z dalšími přídavnými vlastnostmi pro Wicket, nechť se o ně podělí v diskuzi.
I přes zmíněné zápory, které jsem zde popsal, je pro mne Wicket tou nejlepší volbou pro tvorbu web aplikací. Je prostě radost s ním pracovat! :)
Já trochu nadával generiky u tabulek:
OdpovědětVymazat- IColumn je parametrizovaný typ, takže definice sloupců v tabulce je trochu rozvláčná
- konstruktor DataTable bere IColumn[], ale nejde psát new IColumn[] -- to jsem vyřešil triviální pomocnou metodou public static T[] array(T... elements) { return elements; }
- signatury metod ICellPopulator#populateItem jsou obrovské, ale aspoň je za člověka napíše IDE
Jinak generiky maximálně vítám, Wicket je teď ještě o něco lepší než kdy dřív :-)
Ale ten vyvoj byl opravdu dlouhy ... pres slepou vetev 2.0 az k soucasne verzi 1.4.x se generika zmenila od toho, ze byly vsude, az k docela rozumnemu pouziti ... a clovek si nakonec zvykne a je rad ze tam jsou:-) Wicket je opravdu bomba framework.
OdpovědětVymazatWicket je nejlepší, vo tom žádná.. :)
OdpovědětVymazatJinak co se týče dalších projektů, určitě bych doporučil kouknout na Brix (http://code.google.com/p/brix-cms/), ten je hodně povedenej.
Dále např.
http://code.google.com/p/wicket-tree/
http://code.google.com/p/wicket-dnd/
Integrace JQuery do Wicketu je v současné době podle mě nejlepší:
http://code.google.com/p/wiquery/
Pro toho kde se nechce drbat s grafikou by mohl být užitečný:
http://swit.kornr.net/
zajimalo by me, jak jsi zprovoznil security. zkousel jsem to podle navodu s hive, wasp a swarm-1.4-SNAPSHOT.jar (10 Oct 2009), ale PolicyFileHiveFactory factory = new SwarmPolicyFileHiveFactory(getActionFactory()); nefunguje...
OdpovědětVymazatto meo: Ahoj, tak to netusim kde je problem, ja to pouzivam presne tak.
OdpovědětVymazatSwarmPolicyFileHiveFactory factory = new SwarmPolicyFileHiveFactory(getActionFactory());
pote:
factory.addPolicyFile(getServletContext().getResource("/WEB-INF/cesta k hive souboru"));
a nakonec registraci factory
HiveMind.registerHive(getHiveKey(), factory);
Jedine, co me napada, ze k by na classpath melo byt nasledujici:
swarm, wasp, hive, wicomsec
moc dekuju, bylo to tim ze mi chybel wicomsec :))
OdpovědětVymazatjinak hodlam pouzivat wicket + guice + warp + hibernate, na prvni pohled to vypada opravdu uzasne a integrace je jeste snazsi nez s EJB3, natoz se springem. neni tam totiz zadny xml, ikdyz by taky slo pridat... :)