在使用片段滚动页面时转发而不是重定向

时间:2012-04-19 15:29:44

标签: grails redirect anchor fragment forward

我使用forward代替redirect(隐藏网址中的参数),问题是我想将片段传递给forward,因此我的网页会滚动到指定的位置地点。 使用redirect,这可行:

redirect(controller: "mycontroller", action: "myaction", fragment: "anchor")

但是对于forward,它不会滚动到锚位置:

forward(controller: "mycontroller", action: "myaction", fragment: "anchor")

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

片段与redirect一起使用的原因是重定向告诉浏览器向指定的URL发出另一个(GET)请求。这使浏览器有机会1.获取新页面,然后2.滚动到相应的锚点。

使用forward,servlet容器只是告诉另一段代码来处理请求 - 它对浏览器实际上是不可见的,因此浏览器无法在任何地方滚动。这就是fragment isn't a valid option for forward

的原因

为了实现这一目标,您必须:

  • 重定向而非转发,或
  • 使用JavaScript滚动页面,或
  • 发送带有最终获得的初始请求的片段

以上任何一项都应在适当的条件下运作;但是,我不确定我们是否有足够的信息来提供更具体的例子。