这个问题是在2012年提出并回答的。不幸的是,这些答案都不适用于Grails 3.3.8和Fields插件。我尝试了${raw(value(}和我能找到的任何东西。它仍然显示类似<b>你好<b>lt;em>世界<em>{raw(value(}在最新的Grails文档中推荐使用
我被卡住了,任何想法我都会感激的。
好吧,这就是如何做到的:首先,你需要Unescape。将其添加到build.gradle:
编译"org.unbscape:unbscape:1.1.6.RELEASE"//到unbscape html
接下来执行grails创建标签库Unescape。这是你的整个标签库类:
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是字段的名称。在目录"description"中创建一个名为_displayWidget.gsp的文件
<ubs:unescape>${raw(value)}</ubs:unescape>
对值调用原始函数将返回一个org.grails.taglib.TagBodyClosure对象,该对象将传递给您的标签库。这就是为什么您必须对主体进行调用,并将结果转换为标记库中的String。
如果知道如何实现,这很容易实现,但找到如何实现并不容易。文件不好。Fields插件确实让事情复杂了很多。在Fields之前,这很容易做到。