我试图使用Grails Scaffolding在一些遗留数据库表周围抛出一个快速的CRUD应用程序(到目前为止,请参阅此前的StackOverflow问题).我现在已经过了最糟糕的问题,并且有一个正常运行的CRUD应用程序,但是一般可用性仍存在一个问题.
我的许多域对象都与其他域对象具有外键关联.A Contact
属于Owner
等等
但是,在CRUD页面上Contact
,我不想看到...的实际id
键,Owner
因为这对人类用户没有任何意义.我想要在Owner.name
屏幕上显示更人性化的值.
"list"和"show"Views明确处理View自动生成的代码中的所有属性,并且我能够调整该代码来控制所呈现的内容.但是,"创建"和"编辑"视图不会列出所有属性.相反,这些视图会像这样生成某种Grails taglib调用:
...
<fieldset class="form">
<g:render template="form"/>
</fieldset>
...
Run Code Online (Sandbox Code Playgroud)
此调用显然在运行时自动检测字段是什么,并自行决定如何显示它们.对于具有关联的域对象,它使得显示关联对象的乱码ID的错误决定而不是更人性化的属性.
是否有一种"简单"(或至少是"最佳实践")方式来更改字段在"编辑"或"创建"视图中的显示方式?当使用Scaffolding与具有关联的域对象一起使用时,这是一个常见问题.
Ste*_*ins 16
哦,呃...你可以toString()
在关联的域对象上实现一个" "方法,让它返回你想用于显示目的的字段:
class Owner {
String id // not human-friendly
String name // human-friendly
// ...etc...
String toString() {
return name
}
}
Run Code Online (Sandbox Code Playgroud)
现在当你在一个CRUD View for Contact
,它有一个Owner
关联字段时,屏幕上显示的是Owner.name
属性,而不是Owner.id
或一些丑陋的对象引用.