Если у меня есть относительный путь к статическому активу (flash / blah.swf), как лучше всего программно преобразовать его в абсолютный URL (http://localhost/app/flash/blah.swf)? Или как лучше всего получить базовый URL-адрес приложения Wicket? Я пробовал использовать RequestUtils.toAbsolutePath, но, похоже, он не работает надежно и часто выдает исключения. Это должно работать на всех серверах, на которых развернуто приложение.
Wicket: относительно абсолютного URL или получить базовый URL
Ответы (5)
RequestUtils.toAbsolutePath(RequestCycle.get().getRequest().
getRelativePathPrefixToWicketHandler());
работал у меня.
person
Richard Noble
schedule
11.10.2010
Обратите внимание, что это не работает в 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
И базовый URL-адрес
String baseUrl = RequestCycle.get().getUrlRenderer().getBaseUrl().toString()
- person Brad M; 23.10.2014
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