当您生成grails视图时,grails会查看您的关系并为您的表单数据生成正确的html,以便自动绑定到后端域。对于一对一关联grails创建一个下拉列表。
但是,您可能不希望将该属性显示为下拉列表,而是更自定义的内容(例如,具有自动完成功能的文本字段)。一旦你这样做,从该字段到控制器的值,作为一个字符串,你必须首先:
我真的想避免尽可能多地在控制器中执行findBys,因为看起来我正在做的逻辑/事情不应该去那里。控制器应委托给服务层。我不清楚grails文档中如何通过使用 bindData 来做到这一点,它似乎与String,date,Integer属性等一起工作得很好..但是我没看到如何使用bindData对于其他域的属性。
我也真的想避免将 params 对象传递给Service层,因为它似乎不太可重用(或者可能不是,如果我错了,请纠正我)。我想我不喜欢它在语义上看起来如何。我希望第一个超过第二个:
@Transactional
class WithdrawService {
def addWithdraw(Withdraw withdraw) {
//perform business logic here
}
def createWithdraw(Map params){
//perform business logic here
}
}
我们采取以下示例:
class Withdraw {
Person person
Date withdrawDate
}
和父查找表
class Person {
String name
String lastName
static constraints = {
}
@Override
public String toString() {
return "$name $lastName"
}
}
为了在没有任何额外工作的情况下自动发生绑定,grails会在以下请求参数中传递以自动绑定一对一:
带有身份证的人物地图。
[person.id:2,person:[id:2],withdrawDate:date.struct,withdrawDate_month:11,create:Create,withdrawDate_year:2015,withdrawDate_day:10,action:save,format:null,controller:撤回]