Request mappingPage edited by Adam A. KochChanges (58)
Full Content
Wicket 1.4To mount a page in Wicket 1.4 the developer had to use org.apache.wicket.protocol.http.WebApplication's:
Wicket 1.5IRequestTargetUrlCodingStrategy interface and all its implementations are replaced with the IRequestMapper and its respective implementations. To add a mapper into the list of mappers which Wicket will use to process a request use Application.getRootRequestMapperAsCompound().add(mapperInstance). Sometimes you may want a specific IRequestMapper to be process all incoming requests. To do this you should use Application.setRootRequestMapper(IRequestMapper). This mapper may manipulate the Request's URL and then pass it for further processing to the registered non-root mappers. For examples of this idea see the source code of CryptoMapper and HttpsMapper. Default mapper implementationsHomePageMapperThis mapper is pre-configured by Wicket and there is no need to register it. It is used to create IRequestHandler for requests to the root ('/') of the application context. BookmarkableMapperThis mapper decodes and encodes bookmarkable URLs like:
This mapper is also pre-configured and there is no need to register it. To change 'wicket' and 'bookmarkable' segments in the URL to something else see IMapperContext.getNamespace() (the default implementation can be replaced with Application.newMapperContext()). MountedMapperThis mapper is similar to BookmarkableMapper but the difference is that the user application defines the mount point where this mapper matches.
Usage: MyApp.java public void init() { super.init(); getRootRequestMapperAsCompound().add(new MountedMapper("/mount/point", MyPage.class)); mountPage("/mount/point", MyPage.class); // convenient method doing the same as above } This mapper is a combination of all IRequestTargetUrlCodingStrategy implementations from Wicket 1.4. It supports: Indexed parameters - /page/idx1/idx2mountPage("/page", MyPage.class); Named parameters - /page/${named1}/${named2}mountPage("/page/${named1}/${named2}", MyPage.class); Optional named parameters - /page/${named1}/#{named2\mountPage("/page/${named1}/#{named2}", MyPage.class); Arbitrary named parameters - /page/param1Name/param1Value/param2Name/param2Valuemount(new MountedMapper("/page", MyPage.class, new UrlPathPageParametersEncoder())); Query parameters - /page?param1Name=param1Value¶m2Name=param2ValuemountPage("/page", MyPage.class); The mapper can handle a mix of the supported parameters - indexed + named + query. PackageMapperThis mapper can mount a whole package. That is you mount a single page with a mount path prefix and then the mapper knows how to map all Page implementations in that package. Usage: MyApp.java public void init() { super.init(); getRootRequestMapperAsCompound().add( new MountMapper("/mount/point", new PackageMapper( PackageName.forClass(Page3.class)))); mountPackage("/mount/point", Page3.class); } Assuming that PageA package is "com.example.pages" a request to "/mount/point/PageB" will use com.example.pages.PageB if it exists and is an instance of Page. ResourceMapperA mapper which mounts ResourceReference implementations. Usage: MyApp.java public void init() { super.init(); getRootRequestMapperAsCompound().add(new ResourceMapper("/company/logo", new PackageResourceReference(MyPage.class, "res/logo.gif"))); mountResource("/company/logo", new PackageResourceReference(MyPage.class, "res/logo.gif"))); // convenient method doing the same as above } CryptoMapperA wrapper around another mapper which will encrypt/decrypt the URLs generated by the inner one. Usage: MyApp.java public void init() { super.init(); IRequestMapper cryptoMapper = new CryptoMapper(getRootRequestMapper(), this); setRootRequestMapper(cryptoMapper); } HttpsMapperA mapper which makes a redirect to the same URL with HTTPS protocol if the requested page is annotated with @RequireHttps or to HTTP protocol if the last processed page had @RequireHttps and the one going to be processed has no such annotation. Usage: public class MyApplication extends WebApplication { public void init() { super.init(); getRootRequestMapperAsCompound().add(new MountedMapper("secured", HttpsPage.class)); setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig(80, 443))); } } Since Wicket 6.x HttpsMapper can be easily extendedThe HttpsMapper can now be subclassed. This means that by overriding the HttpsMapper.getDesiredScheme method you can programmatically determine what scheme to use. public void init() { super.init(); setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig(80, 443)) { @Override protected Scheme getDesiredSchemeFor(Class<? extends IRequestablePage> pageClass) { if (getConfigurationType()==RunTimeConfigurationType.DEVELOPMENT) return Scheme.HTTP; else return super.getDesiredSchemeFor(pageClass); } } Making all URLs absoluteSee page Making all URLs absolute
Change Notification Preferences
View Online
|
View Changes
|
Add Comment
|
- [CONF] Apache Wicket > Request mapping confluence
- [CONF] Apache Wicket > Request mapping confluence
