当前位置:  开发笔记 > 编程语言 > 正文

如何重定向到Grails应用程序中的最后一个访问过的页面?

如何解决《如何重定向到Grails应用程序中的最后一个访问过的页面?》经验,为你挑选了2个好方法。

我是Grails的新手,我正在努力解决许多简单的问题.

例如,当我从页面顶部布局上显示的模板视图登录/注销时,我还没有找到回到上次访问页面的正确方法.

我解决此问题的最后一次尝试是将$ {params.controller}和$ {params.action}保存在发送到注销操作的参数中,然后重定向.嗯......即使这样也失败了.这是gsp片段:

Logout

最后一个代码行抛出以下异常:

ERROR errors.GrailsExceptionResolver  - Error evaluating expression [[currentController: ${params.controller}, currentAction: ${params.action}]]

所以我的问题是:

1 - 如何在登录/注销操作后重新加载上次访问的页面?

2 - 为什么我的代码有例外?

谢谢

编辑:关于问题#2,似乎以下代码工作:

Logout

但我真的不明白原因......

EDIT2:我还找到了重定向到上次访问页面的解决方案:

redirect(url: request.header('referer'))

但不幸的是,在登录后执行此操作时,我页面中呈现的内容是重复的.任何想法或任何其他安全解决方案?



1> nclu..:

我正在使用这个控制器端:

    redirect(uri: request.getHeader('referer') )



2> Daniel Rinse..:

重定向到最后一页的最简单方法是直接使用URI:

Logout

(request.forwardURI是浏览器中显示的完整URL,request.contextPath而是表示应用程序上下文的URL部分,例如" http:// localhost:8080/yourApp " - 因此,从转发URI中删除上下文路径的结果是app-relative URI,例如"/ mycontroller/myaction")

在您的注销操作中,只需重定向到此URI:

def targetUri = params.targetUri ?: "/"
redirect(uri: targetUri)

使用引用者的AFAIK并不完全安全,因为这依赖于用户代理(浏览器)附加引用者HTTP头(可能已被禁用).

至于你的第二个问题: Grails自动将GSP中的列表或映射属性值解释为Groovy表达式.所以这

Logout

相当于

Logout

再次包装此表达式的部分${...}似乎混淆了GSP编译器.

希望这可以帮助.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有