2011-09-08 22 views
7

Lúc đầu, tôi đã liên kết này qua biểu tượng twitter:Làm cách nào để đảo ngược tuyến đường một tệp tĩnh?

@{'/public/images/twitter-icon.png'/} 

Nhưng bây giờ tôi muốn thể hiện một Twitter-, Facebook- hoặc LinkedIn biểu tượng tùy loại. Vì vậy, tôi đã tạo thẻ FastTag lấy loại làm thông số và mã trông giống như sau:

In the view: 
#{myApp.icon contact.type/} 

FastTag Java Code: 
String type = (String) args.get("arg"); 
out.print("/public/images/" + type + "-icon.png"); 

Nó hoạt động tốt. Tuy nhiên, trên máy chủ xây dựng của mình, chúng tôi chạy ứng dụng có tiền tố trên uri như thế này

http://ourdomain.com/appname/... 

Rõ ràng là/công khai/hình ảnh ... sẽ không hoạt động tại đây. Vì vậy, tôi đã tìm ra tôi phải hỏi Router để có địa chỉ thích hợp. Tôi đã thử những điều sau đây mà không thành công:

Router.reverse("/public/images/" + type + "-icon.png"); 
Router.reverse("/public/"); 
Router.reverse("staticDir:public"); 

Tất cả ba kết quả trong một NoRouteFoundException. Làm thế nào tôi có thể nhận được các tuyến đường chính xác cho các biểu tượng của tôi?

Ở routes nộp Tôi có tuyến đường mặc định cho các tập tin tĩnh

GET  /public/  staticDir:public 

Trả lời

9

Tôi tin rằng đây là những gì bạn muốn:

String imageUrl = Router.reverse(VirtualFile.fromRelativePath("public/images/" + type + "-icon.png")); 
0

Router.reverse được sử dụng tạo ra dạng URL một hành động! có lẽ bạn có thể xác định một lộ trình trong đó bao gồm tên ứng dụng của bạn và tuyến đường một hành động ví dụ:

GET/appname/public/TestController.test

bây giờ, bạn có thể sử dụng

Router.reverse ("TestController .test ")

tải URL.

+0

Bất kỳ cơ hội bạn có thể thử và mở rộng câu trả lời này một chút không? Nó không thực sự nói bất cứ điều gì sử dụng ngay bây giờ:/ – obfuscation

0

Tôi nghĩ rằng nó tốt hơn để làm điều gì đó như:

GET  /img/  staticDir:public/images 

Và trong các mẫu chỉ:

out.print("/img/" + type + "-icon.png"); 
+0

Điều đó sẽ không hoạt động trong trường hợp của chúng tôi, nơi chúng tôi có chơi chạy trong một url như thế này: http://ourdomain.com/appname/img/ -icon.png . Bạn không nhận được/appname/img/ -icon.png chỉ/img/ -icon.png –

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