Как заставить Grails не избегать HTML-тегов, сгенерированных CK Editor - PullRequest
0 голосов
/ 10 ноября 2018

Этот вопрос был задан и получен ответ в 2012 году. К сожалению, ни один из ответов не работает с Grails 3.3.8 и плагином Fields. Я пробовал $ {raw (value)} и все, что мог найти. Он по-прежнему показывает такие вещи, как Hello world . $ {raw (value)} рекомендуется в последней документации Grails здесь

Я застрял и буду рад любым идеям.

1 Ответ

0 голосов
/ 11 ноября 2018

ОК, вот как это делается: Во-первых, вам нужен 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 действительно сильно усложняет ситуацию. До Поля это было легко сделать.

...