Я не уверен, что вы подразумеваете под «печатью моего якорного тега с двойными кавычками, превращая его в строку», но я предполагаю, что печатаемый HTML-код автоматически экранируется, и поэтому вы буквально видите исходный HTML-код.(с <
-ами и всеми) в браузере вместо ссылки или кнопки.
Итак, сначала назначьте значения с синтаксисом <#local someName>content</#local>
вместо <#local someName="content">
:
<#local rightElement><a class='set-right' href='${data.url}'>Forgot your password?</a></#local>
<#local rightButton><input type='button' class='js-show-pass btn-toggle-password btn-link' value='Show'></#local>
Это гарантирует, что ${data.url}
и т.п. должным образом экранированы (если вы используете авто-экранирование, и вы должны это сделать), также вам не придется избегать / бежать "
или '
внутристроковый литерал, вы можете использовать #if
и т. д. при построении значения и т. д.
Затем, где вы печатаете значение HTML, если вы используете современную версию автоматического экранирования (попробуйте ${.output_format}
чтобы увидеть - он должен напечатать HTML
тогда, а не undefined
), теперь вы можете просто написать ${rightElement}
, потому что FreeMarker знает, что он захватил HTML, и поэтому больше не нуждается в экранировании.Если вы используете унаследованную версию автоматического экранирования (в которой использовалась директива #escape
), вам нужно написать <#noescape>${rightElement}</#noescape>
.