Grails:更改控制器用于gsp发现的默认文件夹

时间:2013-05-23 14:56:33

标签: grails spring-mvc

有没有办法配置控制器用来查找它的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'),但这似乎有点不必要。另外,我显然在这些控制器中有很多其他动作/页面,并且不想在每个动作中输入它。

控制器类上用于指定默认文件夹的简单注释是理想的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

您可以创建插件,而不是为每个功能设置一个包,使插件的控制器名称唯一。

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

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


实施例

Function1GrailsPlugin

  • 的grails-app /控制器/ DashboardController
  • 的grails-app /视图/仪表板/ *

Function2GrailsPlugin

  • 的grails-app /控制器/ DashboardController
  • 的grails-app /视图/仪表板/ *

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'
    }
}