0
votes

I have a GSP page containing different input elements related to a specific context. For example I can display a textfield for usecase A, but not for usecase B (short version, it's very complex actually)

For this I have a domain object, which is normally populated with plain static HTML. But now I need to add dynamic data, like this:

def field = new InputField()
field.code = '<input type="text" name="foo" value="${currentUser.name}" />'
// or: field.code = '<option value="1"><g:message code="someCode"/></option>'

This code is stored in database. It will be rendered later on in GSP:

<g:each in="${InputField.findAllBySomeCondition(...)}">
    ${it.code}
</g:each> 

This will print the input element, but instead of evaluating the dynamic code (${currentUser.name}) it is just printed as plain text.

Unfortunately I can't change the whole process, there are over 3000 different input elements stored already, but none of them are dynamic.

Is there a way to tell Grails to evaluate code within the variable before printing it?

edit: I'm using Grails 2.2.4

1

1 Answers

0
votes

That's because you're using ' for the string, not ". When using ' the result is a String, not a GString with variable evaluation.

Try changing to:

field.code = "<input type=\"text\" name=\"foo\" value=\"${currentUser.name}\" />"

or use the triple version """ to avoid escaping:

field.code = """<input type="text" name="foo" value="${currentUser.name}" />"""