在grails中获取动态bean字段

时间:2013-02-02 11:35:24

标签: grails groovy

我创建了一个taglib来缩短输入字段代码。它预设'名称','价值'等。现在我需要获取一个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中没有字段'field'。我希望它可以被'name'或'surname'动态替换,或者是param'field'的值。

def val = bean.field

我尝试用各种GString /插值变体进行实验,但没有任何效果 当然我可以添加另一个param来传递值,但我觉得它不应该被要求,因为我已经拥有了我需要的所有东西来在taglib中...

你能告诉我一些指示吗? 感谢

2 个答案:

答案 0 :(得分:1)

如果bean是对象实例而field是表示该对象成员的String,则可以尝试以下操作:

def val = bean."$field"

答案 1 :(得分:1)

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

def val = bean."${field}"

你甚至可以在GString中执行一些逻辑。假设你有一个默认字段,并且你想在'field'变量中使用名称,只要它不是null:

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