我正在使用脚手架为Grails 3中的Oracle 12c DB创建一个简单的CRUD,而对于具有如下所示的显式整数ID列的简单表:
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访问给定行的scaffolded视图,只要我有一个像这样的复合键的表:
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']
}
}
...你不能再访问行了(或者我不知道怎么做)。 Scaffolding不再生成列表视图中的视图的链接,并且试图通过像aliasFrequencyDict/show/0/D/PL
这样的URL访问它(这恰好是在复合id的定义中指定的/<view>/<frequency>/<unit>/<lang>
)导致404。
使用复合ID时,如何访问相关的节目,编辑等页面?
使用复合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)
}
}
我希望有所帮助。