1

有没有办法配置控制器用于查找其 GSP 文件的起始文件夹?

我有一个 Grails 项目 (v2.0.1),我希望能够将我的控制器和视图组织到反映我的功能的包中。

即我的控制器:

uk.co.myCompany.function1.DashboardController.groovy
uk.co.myCompany.function2.DashboardController.groovy

我的意见文件夹结构:

views -> function1 -> dashboard -> index.gsp
views -> function2 -> dashboard -> index.gsp

每当我打电话render (view: 'index')DashboardController,它都会寻找views/dashboard/index.gsp

我可以改为打电话render (view: '../function1/dashboard/index'),但这似乎有点不必要。另外,我显然在这些控制器中有许多其他操作/页面,并且不想在每个操作中都输入它。

控制器类上的简单注释以指定默认文件夹将是理想的。有任何想法吗?

4

1 回答 1

1

如果您想按功能组织控制器,并且它们可以具有相同的名称,我建议您使用Grails 的新命名空间支持

您可以创建插件,而不是为每个功能使用一个包,从而使您的控制器名称因插件而异。

生成新版本的插件来测试您的应用程序可能会非常庞大​​,但为了避免这种情况,您可以使用grails.plugin.location将插件位置指定为依赖项。

使用这种结构,我认为您可以遵循 Grails 约定,但同时在函数中组织您的代码。


例子

Function1Grails插件

  • grails-应用程序/控制器/仪表板控制器
  • grails-应用程序/视图/仪表板/*

Function2Grails插件

  • grails-应用程序/控制器/仪表板控制器
  • grails-应用程序/视图/仪表板/*

MainApp - 更改UrlMappings

static mappings = {
    //requests to /function1 will be handled by the
    //DashboardController provided by the Function1 plugin
    "/function1" {
        controller = 'dashboard'
        plugin = 'function1'
    }

    //requests to /function2 will be handled by the
    //DashboardController provided by the Function2 plugin
    "/function2" {
        controller = 'dashboard'
        plugin = 'function2'
    }
}
于 2013-05-23T16:56:03.093 回答