如何在Grails中使用复合键访问行?

时间:2019-02-18 10:35:13

标签: java grails gorm grails-3.0 grails3

我正在使用脚手架为Grails 3中的Oracle 12c DB创建一个简单的CRUD,而为具有显式整数ID列的简单表创建一个CRUD:

class Config {
    int id
    String name
    String type
    String value
    String description
    int status

    static constraints = {
        /* constraints constraints constraints */
    }

    static mapping = {
        sort 'name'
        version false
        id column: 'CONFIGID', name:'id', generator:'sequence', params:[sequence: 'CONFIG_SEQ']
    }
}

一切正常,只要我有了一个包含以下内容的表,就可以通过列表视图中的自动生成的链接以及以config/<view>/<ID>形式的显式URL访问给定行的支架视图。像这样的复合键:

class AliasFrequencyDict implements Serializable{
    String frequency
    String unit
    String description
    String lang

    static constraints = {
        /* constraints constraints constraints */
    }

    static mapping = {
        sort 'frequency'
        version false
        id composite: ['frequency', 'unit', 'lang']
    }
}

...您无法再访问行(或者我不知道如何)。脚手架不再生成到列表视图中视图的链接,并且尝试通过类似aliasFrequencyDict/show/0/D/PL的URL(如复合ID的定义中指定的,精确地为/<view>/<frequency>/<unit>/<lang>)来访问它,结果为404。

使用复合ID时如何访问相关的显示,编辑等页面?

1 个答案:

答案 0 :(得分:1)

  

在使用以下内容时,如何访问相关的显示,编辑等页面   复合ID?

有很多方法可以做到这一点。例如,对于show,您可以使用一个看起来像这样的URL映射...

"/aliasFreqDict/$freq/$unit/$language"(controller: 'aliasFreqDict', action: 'show')

然后执行相应的控制器操作...

class AliasFreqDictController {

    AliasFreqService aliasFreqService

    def show(String freq, String unit, String language) {
        // have a service method that looks up the instance by these properties...
        respond aliasFreqService.find(freq, unit, language)
    }
}

我希望有帮助。