2010-04-12 8 views
13

Wenn ich einen relativen Pfad zu einem statischen Asset habe (flash/blah.swf), was ist der beste Weg dies programmatisch in eine absolute URL zu konvertieren (http://localhost/app/flash/blah.swf)? Oder wie erhält man am besten die Basis-URL der Wicket-Anwendung? Ich habe versucht, RequestUtils.toAbsolutePath zu verwenden, aber es scheint nicht zuverlässig zu funktionieren und wirft häufig Ausnahmen. Dies muss auf allen Servern funktionieren, auf denen die App bereitgestellt wird.Wicket: Relativ zu absoluter URL oder get base URL

Antwort

8
RequestUtils.toAbsolutePath(RequestCycle.get().getRequest(). 
    getRelativePathPrefixToWicketHandler()); 

für mich gearbeitet.

+3

Hinweis ist, dass dies nicht in Wicket 1.5 funktioniert, die keine einzige arg hat 'toAbsolutePath' –

0

org.apache.wicket.protocol.http.servlet.ServletWebRequest hat eine Methode getRelativePathPrefixToContextRoot() (eigentlich als abstrakt in einer Oberklasse definiert).

Ein Standard-Idiom dafür verwendet, ist

RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot() + location; 
0

ich so etwas wie dies am Ende mit nach einer base_url Eigenschaft meiner MyApplication Klasse hinzufügen, die die Wicket Anwendung erstreckt.

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)); 
1

Für Wicket 1.5 gibt Informationen here

12

Für Wicket 6 es

String absoluteUrl = RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse("my-relative-url.html")); 
+1

das funktioniert für Wicket 1.5 zu – 1ac0

+3

Und die Basis-URL ist 'String baseUrl = RequestCycle.get(). GetUrlRenderer(). GetBaseUrl(). ToString()' –