Grails 按字段名获取字段并将其设置为值

Grails 按字段名获取字段并将其设置为值,grails,groovy,Grails,Groovy,我想为域类中的字段设置一个值。 比如说, class Example { String name String lastName } 现在,从响应中我得到域名、对象实例id、字段名和值。我必须将值设置为域类中的字段 这里我得到的值是 domainName = 'Example' instanceId = 1 fieldName = 'name' valueToSet = 'XYZ' 那么我应该如何设置字段名的值呢?这可能很简单,但我是grails和groovy的新手。基于域名,必

我想为域类中的字段设置一个值。 比如说,

class Example {
   String name
   String lastName
}
现在,从响应中我得到域名、对象实例id、字段名和值。我必须将值设置为域类中的字段

这里我得到的值是

domainName = 'Example'
instanceId = 1
fieldName = 'name'
valueToSet = 'XYZ'

那么我应该如何设置字段名的值呢?这可能很简单,但我是grails和groovy的新手。

基于域名,必须在运行时创建一个新的域实例。为此,必须注入
grailsApplication
。以下是一个可以在控制器或服务类中建模的示例:

class SomeService {
    def grailsApplication

    def someMethod(String domainName, long instanceId, 
                   String fieldName, def valueToSet) {

        Class domainClazz = grailsApplication.domainClasses.find { 
            it.clazz.simpleName == domainName 
        }.clazz

        def domainInstance = domainClazz.get( instanceId )
        domainInstance."$fieldName" = valueToSet

        domainInstance.save()
    }
}

您可以通过为Grails域类的属性分配一个映射来填充它,例如从控制器中的参数(使用方便的自动绑定)。例如:

ded example=新示例() example.properties=params

因此,您可以从中看到,域对象可以被视为一组属性。这意味着您可以使用字符串作为键,因此您可能有如下内容:

示例['name']='XYZ'


我不知道你是否在问这个问题,但我希望它能有所帮助。

我试过这个,效果非常好。但它对字符串值有效。我该怎么做才能使它也适用于其他数据类型?好问题。我期待着你的这个问题,你问我这个问题很好。只需将
someMethod
的签名更改为具有
def valueToSet
而不是
String
。这确保
valueToSet
的静态类型是
Object
,而实际类型是在运行时确定的。