在GSP中打印时,在变量中评估Groovy / Grails代码

时间:2014-09-17 13:39:44

标签: grails groovy gsp

我有一个GSP页面,其中包含与特定上下文相关的不同输入元素。 例如,我可以显示用例A的文本字段,但不能显示用例B(短版本,它实际上非常复杂)

为此,我有一个域对象,通常使用纯静态HTML填充。但现在我需要添加动态数据,如下所示:

def field = new InputField()
field.code = '<input type="text" name="foo" value="${currentUser.name}" />'
// or: field.code = '<option value="1"><g:message code="someCode"/></option>'

此代码存储在数据库中。它将在GSP中稍后呈现:

<g:each in="${InputField.findAllBySomeCondition(...)}">
    ${it.code}
</g:each> 

这将打印输入元素,但不是评估动态代码(${currentUser.name}),而是打印为纯文本。

不幸的是,我无法改变整个过程,已经存储了超过3000种不同的输入元素,但它们都不是动态的。

有没有办法告诉Grails在打印之前评估变量中的代码?

编辑:我使用的是Grails 2.2.4

1 个答案:

答案 0 :(得分:0)

那是因为你正在使用&#39;对于字符串,而不是&#34;。使用&#39;结果是一个String,而不是一个带有变量评估的GString。

尝试更改为:

field.code = "<input type=\"text\" name=\"foo\" value=\"${currentUser.name}\" />"

或使用三重版本&#34;&#34;&#34;避免逃避:

field.code = """<input type="text" name="foo" value="${currentUser.name}" />"""