2

我正在尝试在遗留数据库之上构建一个 grails (2.1.0) 应用程序。它有很多表,我非常想只使用动态脚手架。问题是一些表有一个字符串作为主键,但是 src/templates/scaffolding/Controller.groovy 中的模板代码例如 show 是

def show(Long id) {
    def ${propertyName} = ${className}.get(id)
    if (!${propertyName}) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), id])
        redirect(action: "list")
        return
    }

    [${propertyName}: ${propertyName}]
}

对于字符串键,这似乎将字符串变为 null,并且 get 失败并出现错误$Domain not found with id null

如果我运行生成控制器并将签名更改为def show(String id),它将按预期工作。

那么,有没有办法在“动态脚手架时间”检查域类并相应地编写方法?

4

1 回答 1

6

在控制器模板中,您有一个domainClass变量,可让您访问要GrailsDomainClass为其生成控制器的表示类,因此您可以执行以下操作(同样适用于edit,updatedelete):

def show(${domainClass.identifier.type.name} id) {

应生成def show(java.lang.Long id)def show(java.lang.String id)酌情生成。

于 2012-09-07T15:25:10.057 回答