2011-09-08 9 views
7

Początkowo miałem ten link ikoną Twitterze:Jak mogę odwrócić trasę pliku statycznego?

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

Ale teraz chcę pokazać ikonę Twitter-, Facebook- lub LinkedIn w zależności od typu. Stworzyłem więc FastTag, który przyjmuje typ jako parametr, a kod wygląda następująco:

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

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

Działa dobrze. Ale na naszym serwerze kompilacji możemy uruchomić aplikację z prefiksem na URI jak ten

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

Oczywiście/public/obrazy ... nie zadziała tutaj. Więc pomyślałem, że muszę poprosić router o właściwy adres. Próbowałem następujących bez powodzenia:

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

Wszystkie trzy wynik w NoRouteFoundException. Jak mogę uzyskać poprawną trasę dla moich ikon?

W trasach złożyć Mam trasy domyślnej dla plików statycznych

GET  /public/  staticDir:public 

Odpowiedz

9

Wierzę, że to jest to, co chcesz:

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

Router.reverse być wykorzystane wygenerować formularz URL jedną akcję! może można określić trasy, które obejmują swoją nazwę aplikacji i trasy jedno działanie np

GET/appname/public/TestController.test

teraz, można użyć

Router.reverse ("TestController .test ")

uzyskać adres URL.

+0

Każda szansa Czy mógłbyś spróbować nieco rozszerzyć tę odpowiedź? W rzeczywistości tak naprawdę nic nie mówi:/ – obfuscation

0

myślę, że lepiej jest zrobić coś takiego:

GET  /img/  staticDir:public/images 

I w szablonie tylko:

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

To nie zadziała w naszym przypadku, w którym gramy w taki URL: http://ourdomain.com/appname/img/ -icon.png . Nie dostajesz/appname/img/ -icon.png just/img/ -icon.png –

Powiązane problemy