#grails #groovy #taglib #gstring
#grails #groovy #taglib #gstring
Вопрос:
У меня есть метод taglib, и я извлекаю объект из базы данных со строковыми выражениями для оценки. Из документов должно быть возможно сделать что-то вроде этого:
out << "<div id="${attrs.book.id}">"
Но когда я пытаюсь сделать то же самое для объекта, извлеченного из базы данных, выражение между ${} не вычисляется. Я понял, что причина в том, что у меня есть строка, поэтому я попытался преобразовать ее в GString, но без какого-либо успеха.
// objectFromDb.content = "<div id="${attrs.book.id}">"
def objectFromDb = fetchObjectFromDb()
def gStringExpression = "${objectFromDb.getContent()}"
out << gStringExpression
Как я могу добиться вычисления выражения внутри taglib? Я хочу иметь разные переменные для каждого объекта, поэтому использовать TemplateEngine невозможно, поскольку я не знаю, какие переменные будут использоваться.
Комментарии:
1. Используйте этот код:
out << "<div id="${attrs.book.id}">"
и попробуйте вызвать ваш taglib следующим образом:<yourTaglibNamespace:yourTaglibMethod book="[id:'666']"/>
какой ответ вы получите?2. Я получил это:
<div id="666">
3. Таким образом, выражение действительно вычисляется. Похоже, проблема в объекте из базы данных
4. Да, я также писал, что объект db может содержать строку, которая затем не оценивается. Проблема в том, что когда я конвертирую ее в GString, она также не оценивается.
5. Я не понимаю. «<идентификатор div=»${attrs.book.id }»>» — это gstring , и он всегда вычисляется, независимо от того, какой тип book.id есть.
Ответ №1:
попробуйте это
def output = ""
def objectFromDb = fetchObjectFromDb()
def output = objectFromDb.getContent() // use toString() if needed
out << output
Комментарии:
1. Нет,
output
это строка. И строка не вычисляет выражения.2. Я удивлен. Я использовал этот код сто раз без каких-либо проблем для рендеринга материалов в TagLib и, в конечном счете, в GSP из базы данных. Когда я не использовал вышеупомянутый формат, у меня была проблема с оценкой выражений.