ОК, вот как это делается:
Во-первых, вам нужен Unbescape. Добавьте это в build.gradle:
скомпилировать "org.unbescape: unbescape: 1.1.6.RELEASE" // чтобы отменить вывод 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>
Вызов необработанной функции для значения возвращает объект org.grails.taglib.TagBodyClosure, который передается вашему тегу lib. Вот почему вы должны сделать вызов для тела и превратить результат в строку в вашем теге lib.
Это легко реализовать, если знать, как это сделать, но выяснить, как это сделать, было непросто. Документация не хорошая. Плагин Fields действительно сильно усложняет ситуацию. До Поля это было легко сделать.