【问题标题】:link directly to GSP直接链接到 GSP
【发布时间】:2011-01-11 08:09:36
【问题描述】:

在 GSP 中,是否可以创建到另一个 GSP 的直接链接?我知道我可以使用:

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

并在 UserController 中定义 foo 动作以显示相应的 GSP

class UserController {
    def foo = {}
}

但是有什么方法可以在不必创建空的foo 操作的情况下实现相同的结果?

谢谢, 唐

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    从 Grails 2.x 开始,这是不可能的。直接链接到 .gsp 的能力是一个安全漏洞,可用于避免 @Secured 注释。尽管如@Colin Harrington 的回答所示,URL 映射方法仍然有效。

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

    【讨论】:

      【解决方案2】:

      有一个uri属性是undocumented ,但是你可以在source看到它:

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

      HTH

      【讨论】:

      • 嘿戴夫,路径应该是什么?我试过“/views/p.gsp”和“grails-app/views/p.gsp”都没有用。
      • 从路径中删除 /views/,只需执行 p# 而不是 p.gsp 即可解决。
      【解决方案3】:

      createLink tag 适合与控制器操作一起使用,不会在 url 属性之外执行您希望它执行的操作。

      您始终可以通过以下方式直接访问 gsp:/user/foo.gsp 以及 linkresource 标记的组合。

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

      否则,您可以创建将请求直接映射到视图的 URL 映射。

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

      使用 Grails 1.2,您可以创建一个直接映射到视图的 named URL Mapping

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

      然后将它与链接标签一起使用:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        • 2022-01-22
        • 2015-06-12
        相关资源
        最近更新 更多