Grails render()带有片段参数

时间:2011-07-28 15:40:37

标签: grails grails-controller

有没有办法使用带有片段参数的render(),所以在页面加载时它会自动滚动到页面的特定部分?与我们如何调用

类似
redirect(controller: "book", action: "show", fragment: "profile")

2 个答案:

答案 0 :(得分:2)

您无法将其传递给render(),因为当您实际调用render()时,网址已经确定并映射到您的操作;所有渲染工作都在控制写回响应的内容。

在调用呈现控制器操作之前,片段必须已经在URL 中。这是一个例子:

grails-app/controllers/MyController.groovy

class MyController {
    def foo = {
        render(view: 'foo')
    }

    def quux = {
        redirect(action: 'foo', fragment: 'baz')
    }
}

grails-app/views/my/foo.gsp

<html>
  <head>
    <title>Foo</title>
  </head>
  <body>
    <a id="bar">Bar</a>
    <g:each in="${0..100}"><br/></g:each>
    <a id="baz">Baz</a>
  </body>
</html>

使用各种网址:

http://example.com/myapp/my/foo     - doesn't scroll to an anchor
http://example.com/myapp/my/foo#baz - scrolls to the 'baz' anchor
http://example.com/myapp/my/quux    - scrolls to the 'baz' anchor'

答案 1 :(得分:1)

没有办法直接使用grails渲染调用来指定片段,但是在我的代码中,我正在使用一种解决方案似乎提供了大多数所需的功能而只有一点额外的复杂性。诀窍是将所需的片段引用作为模型的一部分传递,然后在GSP页面中对该引用进行操作。因此,我的控制器中的渲染调用如下所示:

def foo() {
    render(view : 'foo', model:[fragment:'myFragment'])
}

然后,在GSP中,我使用以下Javascript访问模型:

<g:javascript>
    if ("${fragment}") {
        window.location.href = "#${fragment}";
    }
</g:javascript>

GSP会告诉您的浏览器跳转到页面中所需的锚点(如果有的话)。