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
RequestUtils.toAbsolutePath(RequestCycle.get().getRequest().
getRelativePathPrefixToWicketHandler());
ha lavorato per me.
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;
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));
Per Wicket 1.5 ci sono informazioni here
Per Wicket 6 è
String absoluteUrl = RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse("my-relative-url.html"));
questo funziona per wicket 1.5 anche – 1ac0
E l'URL di base è 'String baseUrl = RequestCycle.get(). GetUrlRenderer(). GetBaseUrl(). ToString()' –
Si noti che questa non funziona in Wicket 1.5, che non ha un unico arg 'toAbsolutePath' –