在 Grails 控制器中重定向

Posted

技术标签:

【中文标题】在 Grails 控制器中重定向【英文标题】:redirect in Grails controller 【发布时间】:2015-02-20 14:44:57 【问题描述】:

我是 Grails 新手,我使用的是 Grails 版本 2.3.4,在我的应用程序中我有 2 个控制器

应用用户

管理许可证

,在 AppUsers 中有一个名为 auth 的方法,其代码如下:

def auth()

    if (!params.username.empty)
    
  redirect  (controller: "manageLicences" , action:"checkLicense")
     

在 ManageLicense 控制器的 checkLicense 中,我根据某些条件进行一些重定向

def checkLicense 
if (someCondition) 
    redirect (controller:'manageLicences' , action:'list')
        
    else 
        redirect  (controller:'appUsers' , action:'login' )

        

,问题是当我的应用程序到达时

 redirect  (controller: "manageLicences" , action:"checkLicense")

在 AppUsers 控制器中,而不是转到 checkLicense 中的重定向,浏览器中的 URL 将是

http://localhost:8080/MyApplication/manageLicences/checkLicense

和空白页,有什么建议吗?

【问题讨论】:

有什么建议或建议吗? 确保在每次redirect 调用后都有一个return 声明。 在“if”之前和之后添加一些登录信息以查看发生了什么。 我添加了“返回”,但什么也没发生 还有其他建议吗? 【参考方案1】:

检查您没有从命名空间控制器重定向到不在命名空间中的控制器。

根据Grails Documentation:

将当前操作重定向到另一个操作,可选地传递参数和/或错误。当从命名空间控制器发出重定向时,目标控制器的命名空间隐含为启动重定向的控制器的命名空间。要从命名空间控制器发出重定向到不在命名空间中的控制器,必须使用 null 值显式指定命名空间,如下所示。

class SomeController 
    static namespace = 'someNamespace'
    def index() 
        // issue a redirect to PersonController which does not define a namespace
        redirect action: 'list', controller: 'person', namespace: null
    

【讨论】:

【参考方案2】:
def checkLicense 
    if (someCondition) 
        redirect (controller:'manageLicences' , action:'list')
        return
     else 
        redirect  (controller:'appUsers' , action:'login' )
        return
    

【讨论】:

以上是关于在 Grails 控制器中重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制器操作中重定向到 aspx 页面

Grails 安全插件自定义重定向

在 Play 框架中重定向到同一控制器中的动作

如何在 asp.net mvc 中重定向到正确的控制器操作

在 CodeIgniter 中重定向整个站点不起作用

在 Codeigniter 中重定向后会话丢失