grails - 在grails中获取动态bean字段

标签 grails groovy

我创建了一个标签库来缩短输入字段代码。它预设“名称”、“值”等。现在我需要获取一个 bean 值,但保存该值的字段是动态的。
查看一些代码(缩短以更好地解决我的问题):

普惠制:

<g:validatedInputField bean="${command}" field="surname" />
<g:validatedInputField bean="${command}" field="name" />

标签库

def validatedInputField = { attrs, body ->

    def field = attrs.field
    def bean = attrs.bean

    if (field && bean) {

        def val = bean.field
        out << "<input type=\"text\" name=\"$field\" bean=\"$bean\" value=\"$val\">"
    }
}

所以问题出在下面这一行。它显然不起作用,因为 bean 中没有字段“field”。我希望它动态地替换为“姓名”或“姓氏”或参数“字段”的任何值。

def val = bean.field

我尝试尝试各种 GString/插值变体,但没有任何效果。
当然,我可以添加另一个参数来传递值,但我觉得它不应该是必需的,因为我已经拥有在标签库中获取它所需的一切...

你能给我一些指示吗?
谢谢

最佳答案

在groovy中,您可以使用GString动态引用对象的成员。例如:

def val = bean."${field}"

您甚至可以在 GString 内执行一些逻辑。假设您有一个默认字段,并且您只想在“field”变量不为空时使用该名称:

def val = bean."${field ? field : "default"}

关于grails - 在grails中获取动态bean字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661472/

相关文章:

jenkins - 使用从另一个 Groovy 文件加载的枚举(Jenkins 管道问题)

grails - BuildConfig.groovy Grails 2.2.3中的自定义插件传递依赖项解析

hibernate - Grails 3-具有复合键的域对象并不总是保存

groovy:如何同时将可变参数和闭包传递给方法?

grails - 如何在 grails 中编写 accessDeniedHandler

java - groovy 的矩阵库

grails - 在STS上的Glassfish v 2.1上运行Grails项目

Grails 2.3.1 没有运行

hibernate - Grails 2.4.4 + 可搜索 :0. 6.9 运行时问题

java - 阻止用户电子邮件委托(delegate)确认链接