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

Posted

技术标签:

【中文标题】在 GSP 中打印时在变量中评估 Groovy/Grails 代码【英文标题】:Evaluate Groovy/Grails Code in variable when printing it in GSP 【发布时间】:2014-11-11 14:05:50 【问题描述】:

我有一个 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】:

这是因为您使用 ' 作为字符串,而不是 "。使用 ' 时,结果是字符串,而不是具有变量评估的 GString。

尝试更改为:

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

或使用三重版本“”来避免转义:

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

【讨论】:

嗯对不起,我想我的问题不够清楚。 code 存储在数据库中,稍后在渲染页面时读取

以上是关于在 GSP 中打印时在变量中评估 Groovy/Grails 代码的主要内容,如果未能解决你的问题,请参考以下文章

变量在 GSP 标签中不起作用,但在普通文本中起作用

从 GSP 页面中的变量路径名在新窗口中打开 pdf 文件

GSP:检查模型(变量)是不是为空不工作

使用clang时在gdb中评估libc ++的方法

Smarty:评估存储在 PHP 变量中的模板

为啥在设置 Mongoose 连接时在 .then() 中使用 console.log() 时不打印?