【问题标题】:get dynamic bean field in grails在grails中获取动态bean字段
【发布时间】:2013-01-17 15:51:55
【问题描述】:

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

gsp:

<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 中没有字段“字段”。我希望它被“姓名”或“姓氏”或参数“字段”的任何值动态替换。

def val = bean.field

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

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

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

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

    def val = bean."${field}"
    

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

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

    【讨论】:

    • 昨天一定是迟到了,这不是太难了;-)
    【解决方案2】:

    如果bean 是一个对象实例,而field 是一个代表该对象成员的字符串,您可以尝试以下操作:

    def val = bean."$field"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多