Вычислить строку из базы данных в taglib в Grails

#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 из базы данных. Когда я не использовал вышеупомянутый формат, у меня была проблема с оценкой выражений.