我创建了一个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中...
你能告诉我一些指示吗? 感谢答案 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"}