我有下面的代码片段,想要输出< @ spring.message“name”/>的输出。作为宏的paraneter(占位符参数)。
直接提供它,因为我在下面尝试做的没有用,有谁知道我应该怎么做?
<td class="rightCell"><b><@spring.message "name"/>:</b></td>
<td class="leftCell"><@createUserInputItemModifiedv2 "name", "name", "text", @spring.message "name" /></td>
<#macro createUserInputItemModifiedv2 attributeName, errorMessageName, inputType, placeholder>
<input class="edit" type="${inputType}" id="${attributeName}" name="${attributeName}" placeholder="${placeholder}" value="${user[attributeName]!}"/><br/>
<#if validationErrors?? && validationErrors[attributeName]??>
<div class="errorMessage" id="${errorMessageName}Error">
${validationErrors[attributeName]!}
</div>
</#if>
</#macro>
答案 0 :(得分:1)
那是因为spring.message
也应该是FreeMarker函数,而不仅仅是FreeMarker宏。宏没有返回值(它们可能会直接打印到输出编写器作为副作用),因此您无法在需要表达式的位置调用它们。无论如何......现在如何解决这个问题。查看Spring的源代码,也许这将起作用:
<#function message code><#return springMacroRequestContext.getMessage(code)></#function>
您可以创建utils.ftl
或其他内容,(自动 - )#import
为u
,然后您可以在模板中执行<@createUserInputItemModifiedv2 ..., u.message("name")>
。 (实际上,它可以更方便,所以你可以写msg.name
或类似,但不要在这里进行。)
但是,我不确定是否有关于springMacroRequestContext
或其内容的任何向后兼容性保证。所以最终这应该在Spring中修复。