Začínali jsme s wicket 1.3 takže je pravděpodobné že některé poznámky budou zastaralé
Co je potřeba proto abych do aplikace přidal jeden formulář:
- vytvořit formulář v HTML do souboru *Page.html
- root tagy jsou wicket:extend
- vytvořit novou třídu *Page extends BasePage
- třída obsahuje privátní třídu *Form extend Form
- (pokud je to nutné) do MmcApplication.java přidat mount URI na novou tridu *Page
- jména položek ve formuláři musí korespondovat se jmény proměných u Model objektu, jinak to padá protože nelze volat gettery
- abych mohl pohodlne nacitat data z URL je potreba pridat getter do web/util/BookmarkParams.java
- ??? pridat lokalizacni hlasky
- web/users/ListNavigationPanel.java a web/users/ListNavigationPanel.xml
Co je potreba proto abych pridal novy Manager a DAO:
- definovat iface *Manager.java a implementovat *ManagerImpl.java
- definovat novy Manager do ctx/app-logic.xml
- definovat novy Dao do ctx/app-dao.xml
- do AppFacadeImpl pridej Getter (@Overide) a Setter (@Autowired)
- do BasePage.java pridat getter na *Manager potom je potreba rozsirit interface AppFacade.java a jeho implementaci
Pridani Stranky do hlavniho menu
- mam tridu *Page na kterou lze pristupovat napr pres URL http://localhost:8080/mmc/?wicket:bookmarkablePage=%3Acz.zs.mmc.web.cdl.listing.UniListingClipboardPage a chci aby to slo jednoduseji
- mountuju Tridu na hezci URL MmcApplication.java: mountPage("/unilisting/clipboard", UniListingClipboardPage.class); potom je stranka na http://localhost:8080/mmc/unilisting/clipboard
- do tridy MenuPanel.java je potreba pridat *Page.class.getPackage().getName() mezi supportovane package
- pridat odkaz do navigace SQL prikazem (pro Admina) update mmc_access_map set rules = concat(rules, ‘,*Page’) where role_id = 999 AND obj_type = ‘Page’ AND action = ‘read’
Typické Exceptions
- JUnit xxxManagerTest skončí s chybou NullPointerException na DAO objektu.
- setter ma nastaven @Autowired
- pri testovani managera je potreba dao inicializovat primo v testu jako MOCK aby se odstínili chyby DAO objektu
- org.apache.wicket.markup.MarkupNotFoundException: Markup not found. Component class: cz.zs.mmc.web.cdl.listing.UniListingMergePage
- Např při refaktoringu se změnilo jméno třídy nebo package ale prislusny HTML soubor se jmenuje furt po staru.
- Can’t instantiate page using constructor public cz.zs.mmc.web.LoginPage Caused by: java.lang.NullPointerException at cz.zs.mmc.web.HeaderPanel.(HeaderPanel.java:36)
- do souboru /WEB-INF/app-web.xml pridat
- <context:annotation-config base-package=“cz.zs.cdc.logic”/>
Migrace cz.zs.mmc.web.common.search na cz.zs.mmc.web.common.searchx
- zmenit package v importu ze search na searchx
- zmenit SearchPanelSpecification na SearchPanelDefinition
- jednoduche sloupecky pridat pres def.addColumns(SimpleColumnDef.createColumnDefs(“name”, “login”, “roles”));
AJAX
- pri hledani komponent se u pathu pouziva jako oddelovac dvojtecka :
- pri schovavani a ukazovani je potreba aby neviditelnej component byl zabalenej ve viditelnym a prekreslovat ten viditelnej protoze jinak ajax neviditelnej nejdriv nevyrendruje a pozdeji ho nemuze najit 1
Jak si sahnout z WEB aplikace na Spring bean
- ComponentUtils.getApp(this).getUniListingManager();
- nebo pokud trida dedi BasePage tak by mohla mit primo getter.
- (MmcApplication) getApplication()).getSpringContextLocator().getSpringContext().getBean(validator);
WARN [Localizer] Tried to retrieve a localized string for a component …
- vetsinou v konstruktoru pouzivam volani getString(“xxx”) abych dostal pocestenou hlasku, oprava staci pouzit new StringResourceModel(“xxx”,null) coz ale nevrati String ale Model …
Po 30s se objeví chyba “stránka je prošlá**”
- zřejmě je v konstruktoru použitý final objekt, který nelze serializovat. Typicky XApplication nebo XAppFacade
Moje upravy:** ComponentUtils.getParentForm(this) **upgrade 1.4 -> 1.5
- zmena v package pro PageParameters, i metody pro tahani Long a String jsou jine!
- zmena nazvu XML souboru xxx.xml -> xxx.properties.xml