2010-04-12 12 views
13

Se si dispone di un percorso relativo a un asset statico (flash/blah.swf), qual è il modo migliore per convertirlo a livello di codice in un URL assoluto (http://localhost/app/flash/blah.swf)? O qual è il modo migliore per ottenere l'URL di base dell'applicazione Wicket? Ho provato a utilizzare RequestUtils.toAbsolutePath ma non sembra funzionare in modo affidabile e lancia spesso eccezioni. Questo deve funzionare su tutti i server in cui è distribuita l'app.Wicket: relativo all'URL assoluto o all'URL di base

risposta

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

ha lavorato per me.

+3

Si noti che questa non funziona in Wicket 1.5, che non ha un unico arg 'toAbsolutePath' –

0

org.apache.wicket.protocol.http.servlet.ServletWebRequest ha un metodo getRelativePathPrefixToContextRoot() (in realtà definito come astratto in una superclasse).

un idioma di serie per il suo utilizzo è

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

ho finito per usare qualcosa di simile dopo l'aggiunta di una proprietà base_url alla mia classe MyApplication che estende l'applicazione wicket.

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

Per Wicket 1.5 ci sono informazioni here

12

Per Wicket 6 è

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

questo funziona per wicket 1.5 anche – 1ac0

+3

E l'URL di base è 'String baseUrl = RequestCycle.get(). GetUrlRenderer(). GetBaseUrl(). ToString()' –

Problemi correlati