Калитка. Относительно абсолютного URL-адреса или получения базового URL-адреса.

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

Ответы

Ответ 1

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

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

Ответ 2

Для калитки 6 это

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

Ответ 3

Для Wicket 1.5 есть информация здесь

Ответ 4

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

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

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

Ответ 5

В результате я использовал что-то вроде этого после добавления свойства 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));