09 lutego 2008

Upiększanie URLi w Wicket

Udało się ożywić Daniela w mojej krucjacie ku wicketowemu dobru i w poprzednim wpisie Wicket prościej z mavenowym archetypem wicket-archetype-quickstart skrócił moją bolączkę z rozpoznawaniem tematu upiększania URLi w Wicket.

Od razu po tym jak Daniel wskazał na UrlCodingStrategy w Wicket postanowiłem zabrać się za temat. Okazało się, że on już mnie oczekiwał w rozdziale 3. Developing a Sample Application książki Pro Wicket (Apress). Przeskoczyłem rozdział 2 i zabrałem się za 3. Szczęśliwie temat upiększania w Wicket to trywialna sprawa, więc po niewielkiej zmianie w aplikacji mamy i ten temat "z głowy". Wystarczy wprowadzić do klasy aplikacji następującą zmianę.
package pl.jaceklaskowski.wicket;

import org.apache.wicket.protocol.http.WebApplication;

public class WicketDemoApplication extends WebApplication {

protected void init() {
// upiększ URLe
mountBookmarkablePage("/home", HomePage.class);
}

public Class getHomePage() {
return HomePage.class;
}

}
Kluczem jest skorzystanie z metody org.apache.wicket.protocol.http.WebApplication.mountBookmarkablePage, która związuje "przyjemniejszą" nazwę z wybraną stroną. Od tej pory adres http://localhost:8080/wicket-demo/home wskazuje na stronę HomePage. Oczywiście pojawia się problem, jeśli tych stron jest więcej, ale szczęśliwie w wicketowym WebApplication mamy do dyspozycji inne dodatki jak mapowanie wszystkich stron z wybranego pakietu java do wybranego adresu po nazwie klasy, co w naszym przypadku skończyłoby się na /pages/HomePage, jeśliby założyć, że pages to właśnie ten adres grupujący.

Jest jedno ale, które nie daje mi spokoju, a zwrócił na to uwagę Waldi w swoim Wicket po godzinnej przygodzie - moje trzy grosze... - kto odpowiada za konstruowanie przepływu? Programista javy czy twórca stron HTML? W przypadku JSF "pałeczka" była po stronie programisty, który manipulował faces-config.xml. W GWT jest podobnie, to programista dyktuje warunki (zresztą robi wszystko). Może więc tak musi być? Może to sprawa programisty, a strony to jedynie strony i nie one dyktują warunki działania aplikacji. Chciałoby się jednak deklaratywnie określać przepływy i powiązania między stronami a umieszczenie ich w kodzie java nie upraszcza sytuacji. Zobaczymy później. Na razie nie mogę już doczekać się, aż dojdę do poziomu rozpoznania Wicketa równym Danielowi, który połączył Wicketa ze Spring Framework i OSGi (!) To musi być dopiero zabawa. Can't wait till I'm there! ;-)

p.s. Nieśmiało przypominam o konkursie Blog Roku 2007, w którym po zmianach Notatnik plasuje się na 10. miejscu z 62. głosami. Możesz to zmienić, do czego gorąco zachęcam. Wysyłasz SMSa o treści B00248 pod numer 71222 i dalej cieszysz się lekturą moich przeżyć z dżawką i takimi tam pobocznymi sprawami. To jak, SMS wysłany? Termin upływa 19 lutego 2008, o godz. 12.00. Mikroby i iPody na razie rulez.