Wicket: Relative to absolute URL or get base URL
Asked Answered
B

5

13

If I have a relative path to a static asset (flash/blah.swf), what is the best way to programmatically convert this to an absolute URL (http://localhost/app/flash/blah.swf)? Or what is the best way to get the base URL of the Wicket application? I've tried using RequestUtils.toAbsolutePath but it doesn't seem to work reliably and is frequently throwing exceptions. This needs to work on all servers the app is deployed to.

Ballroom answered 12/4, 2010 at 4:7 Comment(0)
S
8
RequestUtils.toAbsolutePath(RequestCycle.get().getRequest().
  getRelativePathPrefixToWicketHandler());

worked for me.

Sabotage answered 11/10, 2010 at 14:33 Comment(1)
Note that this doesn't work in Wicket 1.5, which has no single arg toAbsolutePathGhostly
H
13

For Wicket 6 it is

String absoluteUrl = RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse("my-relative-url.html"));
Highpitched answered 19/6, 2013 at 15:32 Comment(1)
And base URL is String baseUrl = RequestCycle.get().getUrlRenderer().getBaseUrl().toString()Blinking
S
8
RequestUtils.toAbsolutePath(RequestCycle.get().getRequest().
  getRelativePathPrefixToWicketHandler());

worked for me.

Sabotage answered 11/10, 2010 at 14:33 Comment(1)
Note that this doesn't work in Wicket 1.5, which has no single arg toAbsolutePathGhostly
G
1

For Wicket 1.5 there is information here

Ghostly answered 18/1, 2012 at 12:14 Comment(0)
K
0

org.apache.wicket.protocol.http.servlet.ServletWebRequest has a method getRelativePathPrefixToContextRoot() (actually defined as abstract in a superclass).

A standard idiom for using it is

RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot() + location;
Kally answered 13/4, 2010 at 0:19 Comment(0)
B
0

I ended up using something like this after adding a base_url property to my MyApplication class that extends the wicket application.

MyApplication app = (MyApplication)getApplication();
String appBaseUrl = app.getBaseUrl(); 
if (StringUtils.isEmpty(appBaseUrl)) { 
    appBaseUrl = RequestUtils.toAbsolutePath(urlFor(app.getHomePage(), new PageParameters()).toString());
    app.setBaseUrl(appBaseUrl); 
} 

// Add base URL to <script wicket:id="base_url"></script> to use with Flash
add(new Label("base_url", "base_url = \"" + appBaseUrl + "\";").setEscapeModelStrings(false)); 
Ballroom answered 13/4, 2010 at 3:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.