2010-01-31 22 views
13

Czy w GSP można utworzyć bezpośredni link do innego GSP? Wiem, że mogę używać:link bezpośrednio do GSP

<g:createLink controller="user" action="foo"/> 

aw UserController zdefiniować akcję foo po prostu pokazać odpowiedni GSP

class UserController { 
    def foo = {} 
} 

Ale czy jest jakiś sposób mogę osiągnąć ten sam efekt bez konieczności tworzenia pusty foo akcja?

Dzięki Don

Odpowiedz

25

createLink tag nastawiona jest do stosowania z działań regulatora i nie będzie robić to, co chcesz go do zewnętrznej atrybutu url.

Zawsze można dostać się do pliku GOS bezpośrednio: /user/foo.gsp z kombinacją tagów link i resource.

<g:link url="${resource(dir:'user', file:'foo.gsp')}">user/foo.gsp</g:link> 

W przeciwnym razie można utworzyć mapowanie adresów URL, które odwzorowuje żądanie bezpośrednio na widok.

class UrlMappings { 
    static mappings = { 
     "/user/foo"(view:"user/foo") 
    } 
} 

Korzystanie Grails 1.2 można utworzyć named URL Mapping który mapuje bezpośrednio do widoku:

class UrlMappings { 
    static mappings = { 
     name userFoo: "/user/foo"(view:"user/foo") 
    } 
} 

a następnie używać go z tagiem link:

<link:userFoo>User Foo</link:userFoo> 

lub

<g:link mapping="userFoo">User Foo</g:link> 
13

Istnieje atrybut URI to undocumented, ale można go zobaczyć w source:

<a href="${createLink(uri:'/path/page.gsp')}">link</a> 

HTH

+0

Hey Dave, jaka powinna być droga? Próbowałem "/views/p.gsp" i "grails-app/views/p.gsp" Żaden z nich nie działał. –

+0

Usuń/views/out z twojej ścieżki, po prostu wykonaj p # zamiast p.gsp i powinno to rozwiązać. –

0

Od Grails 2.x, to nie jest możliwe. Możliwość bezpośredniego połączenia z plikiem .gsp była luką w zabezpieczeniach, której można użyć w celu uniknięcia adnotacji @Secured. Metoda odwzorowywania adresów URL nadal działa, jak widać w odpowiedzi @Colina Harringtona.

Patrz: GRAILS-7542: Views are accessible via a URL pattern