【发布时间】:2019-04-13 22:27:36
【问题描述】:
这个问题是在 2012 年提出并回答的。不幸的是,没有一个答案适用于 Grails 3.3.8 和 Fields 插件。我尝试了 ${raw(value)} 以及我能找到的任何东西。它仍然显示 Hello world 之类的内容。在此处的最新 Grails 文档中推荐使用 ${raw(value)}
我被困住了,我会感激任何想法。
【问题讨论】:
这个问题是在 2012 年提出并回答的。不幸的是,没有一个答案适用于 Grails 3.3.8 和 Fields 插件。我尝试了 ${raw(value)} 以及我能找到的任何东西。它仍然显示 Hello world 之类的内容。在此处的最新 Grails 文档中推荐使用 ${raw(value)}
我被困住了,我会感激任何想法。
【问题讨论】:
好的,这是如何做到的: 首先,您需要 Unbescape。将此添加到 build.gradle:
编译 "org.unbescape:unbescape:1.1.6.RELEASE" // 到 unbescape html
接下来执行 grails create-tag-lib Unbescape。这是你的整个标签库类:
import org.unbescape.*
import org.unbescape.html.*
class UnbescapeTagLib {
static defaultEncodeAs = [taglib:'text']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static final namespace = 'ubs'
def unescape = {attrs, body ->
out << HtmlEscape.unescapeHtml(body.call().toString())
}
}
现在创建一个名为“show”的目录,并在其中创建一个名为“description”的目录。这当然是在特定域对象的视图目录中。描述是字段的名称。在目录 'description' 中创建一个名为 _displayWidget.gsp 的文件。这是文件的样子:
<ubs:unescape>${raw(value)}</ubs:unescape>
在 value 上调用原始函数会返回一个 org.grails.taglib.TagBodyClosure 对象,该对象将传递给您的标签库。这就是为什么你必须调用 body 并将结果转换为标签库中的字符串。
如果一个人知道怎么做,这很容易实现,但要知道怎么做并不容易。文档不好。 Fields 插件确实使事情复杂了很多。在 Fields 之前,这很容易做到。
【讨论】: