2010-04-12 17 views
13

Jeśli mam względną ścieżkę do zasobu statycznego (flash/blah.swf), jaki jest najlepszy sposób programowej konwersji tego na bezwzględny adres URL (http://localhost/app/flash/blah.swf)? Lub jaki jest najlepszy sposób na uzyskanie podstawowego adresu URL aplikacji Wicket? Próbowałem używać RequestUtils.toAbsolutePath, ale nie wydaje się działać niezawodnie i często rzuca wyjątków. To musi działać na wszystkich serwerach, na których aplikacja jest wdrożona.Wicket: Względem bezwzględnego adresu URL lub adresu URL bazy

Odpowiedz

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

pracował dla mnie.

+3

Należy pamiętać, że to nie działa w Wicket 1.5, który nie ma jednego argumentu 'toAbsolutePath' –

0

org.apache.wicket.protocol.http.servlet.ServletWebRequest ma metodę getRelativePathPrefixToContextRoot() (faktycznie zdefiniowaną jako abstrakcyjna w nadklasie).

Standardowa idiom za korzystanie z niego jest

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

skończyło się za pomocą czegoś takiego po dodaniu właściwość base_url do mojego MyApplication klasy, która rozciąga stosowanie furtki.

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

Dla Wicket 1.5 znajduje się informacja here

12

Dla Wicket 6 jest

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

działa to dla furtki 1.5 także – 1ac0

+3

Podstawowym adresem URL jest 'String baseUrl = RequestCycle.get(). GetUrlRenderer(). GetBaseUrl(). ToString()' –