Wicket: относительно абсолютного URL или получить базовый URL

Если у меня есть относительный путь к статическому активу (flash / blah.swf), как лучше всего программно преобразовать его в абсолютный URL (http://localhost/app/flash/blah.swf)? Или как лучше всего получить базовый URL-адрес приложения Wicket? Я пробовал использовать RequestUtils.toAbsolutePath, но, похоже, он не работает надежно и часто выдает исключения. Это должно работать на всех серверах, на которых развернуто приложение.


person Gilean    schedule 12.04.2010    source источник


Ответы (5)


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

работал у меня.

person Richard Noble    schedule 11.10.2010
comment
Обратите внимание, что это не работает в Wicket 1.5, в котором нет единственного аргумента toAbsolutePath - person Duncan McGregor; 18.01.2012

Для Wicket 6 это

String absoluteUrl = RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse("my-relative-url.html"));
person Manuel Manhart    schedule 19.06.2013
comment
И базовый URL-адрес String baseUrl = RequestCycle.get().getUrlRenderer().getBaseUrl().toString() - person Brad M; 23.10.2014

Информацию о Wicket 1.5 можно найти здесь

person Duncan McGregor    schedule 18.01.2012

org.apache.wicket.protocol.http.servlet.ServletWebRequest имеет метод getRelativePathPrefixToContextRoot() (фактически определенный как абстрактный в суперклассе).

Стандартная идиома для его использования:

RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot() + location;
person Don Roby    schedule 13.04.2010

В итоге я использовал что-то подобное после добавления свойства base_url к моему классу MyApplication, расширяющему приложение калитки.

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)); 
person Gilean    schedule 13.04.2010