2010-04-12 29 views
13

Nếu tôi có đường dẫn tương đối đến nội dung tĩnh (flash/blah.swf), cách tốt nhất để chuyển đổi chương trình này thành URL tuyệt đối (http://localhost/app/flash/blah.swf) là gì? Hoặc cách tốt nhất để lấy URL cơ sở của ứng dụng Wicket là gì? Tôi đã thử bằng cách sử dụng RequestUtils.toAbsolutePath nhưng nó dường như không hoạt động đáng tin cậy và thường xuyên ném ngoại lệ. Điều này cần phải hoạt động trên tất cả các máy chủ mà ứng dụng được triển khai.Wicket: Tương đối với URL tuyệt đối hoặc nhận URL cơ sở

Trả lời

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

làm việc cho tôi.

+3

Lưu ý rằng điều này không làm việc trong Wicket 1.5, mà không có arg single 'toAbsolutePath' –

0

org.apache.wicket.protocol.http.servlet.ServletWebRequest có phương thức getRelativePathPrefixToContextRoot() (thực sự được định nghĩa là trừu tượng trong lớp cha).

Một thành ngữ tiêu chuẩn để sử dụng nó là

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

tôi đã kết thúc bằng một cái gì đó như thế này sau khi thêm một tài sản base_url đến lớp học của tôi MyApplication mở rộng việc áp dụng wicket.

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

Đối với Wicket 1.5 có thông tin here

12

Đối với Wicket 6 nó là

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

này làm việc cho wicket 1.5 quá – 1ac0

+3

Và URL cơ sở là 'String baseUrl = RequestCycle.get(). GetUrlRenderer(). GetBaseUrl(). ToString()' –

Các vấn đề liên quan