Grails 用大量变量更新域类对象的最佳方法是什么
假设我有Employee域类,我想从UI端的参数映射创建域类的对象 我可以用以下两种方法创建对象Grails 用大量变量更新域类对象的最佳方法是什么,grails,groovy,constructor,Grails,Groovy,Constructor,假设我有Employee域类,我想从UI端的参数映射创建域类的对象 我可以用以下两种方法创建对象 正常方式 Employee Employee=新员工(名称:params.name,rollNo: 参数(否) 等等。若域类有20个变量,那个么我们需要在上述构造函数中写入所有变量 下面是创建对象的最佳方法 员工=新员工(参数) 上面的构造函数将用匹配的参数填充对象。对 现在我的问题来了 若假设我已经从DB中提取了现有的域类对象,那个么现在我想从UI中的参数映射更新这个对象。 最好的方法是什么(就像
最好的方法是什么(就像我们在上面第二个选项中所做的那样)。我认为最好使用命令对象并将其绑定到员工 以下是示例伪代码:
class EmployeeMgmtController {
def editEmp(EmployeeCmd cmd){
Employee editEmp = Employee.get(1)
editEmp.properties = cmd
editEmp.save()
}
}
class EmployeeCmd{
String id
static constraints = {
id blank:false,nullable:false
}
}
或者
如果您在控制器上,并且仍然希望使用params(并排除任何不希望绑定的字段),请执行以下操作:
我认为最好使用命令对象并将其绑定到员工 以下是示例伪代码:
class EmployeeMgmtController {
def editEmp(EmployeeCmd cmd){
Employee editEmp = Employee.get(1)
editEmp.properties = cmd
editEmp.save()
}
}
class EmployeeCmd{
String id
static constraints = {
id blank:false,nullable:false
}
}
或者
如果您在控制器上,并且仍然希望使用params(并排除任何不希望绑定的字段),请执行以下操作:
如果您想在服务类中实现这一点,请让您的服务实现
grails.web.databinding.DataBinder
,然后使用bindData
方法,如下所示
import grails.web.databinding.DataBinder
class MyAwesomeService implements DataBinder {
/**
* Updates the given instance of a domain class to have attribute values specified
* in "newData" map.
*/
MyDomain updateMyDomainAttributes(MyDomain myDomianInstance, Map newData) {
bindData(myDomianInstance, newData)
myDomianInstance.save(flush: true)
}
}
如果您想在服务类中实现这一点,请让您的服务实现
grails.web.databinding.DataBinder
,然后使用bindData
方法,如下所示
import grails.web.databinding.DataBinder
class MyAwesomeService implements DataBinder {
/**
* Updates the given instance of a domain class to have attribute values specified
* in "newData" map.
*/
MyDomain updateMyDomainAttributes(MyDomain myDomianInstance, Map newData) {
bindData(myDomianInstance, newData)
myDomianInstance.save(flush: true)
}
}
我不会同时设置很多字段。有人可能会操纵他们的帖子,一个不在表单上供他们填写的更新字段。这将很难发现、发现和修复。只需将字段设置为正常值。虽然如果你在一页上有20件东西,我会说太多了…我不会同时设置很多字段。有人可能会操纵他们的帖子,一个不在表单上供他们填写的更新字段。这将很难发现、发现和修复。只需将字段设置为正常值。虽然如果你一页上有20件东西,我会说那太多了……你不回答他的问题。他问的是更新,不是创建对象。几乎一样。。谢谢你发现了。我编辑的,你不回答他的问题。他问的是更新,不是创建对象。几乎一样。。谢谢你发现了。我编辑了它。