Если у меня есть относительный путь к статическому активу (flash/blah.swf), что лучший способ состоит в том, чтобы программно преобразовать это в абсолютный URL (http://localhost/app/flash/blah.swf)? Или что лучший способ состоит в том, чтобы получить базовый URL приложения Калитки? Я попытался использовать RequestUtils.toAbsolutePath, но это, кажется, не работает надежно и часто выдает исключения. Это должно работать над всеми серверами, на которых развертывается приложение.
org.apache.wicket.protocol.http.servlet.ServletWebRequest
имеет метод getRelativePathPrefixToContextRoot()
(фактически определенный как абстрактный в суперклассе).
Стандартной идиомой для его использования является
RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot() + location;
Я использовал что-то подобное после добавления свойства 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));