将spring宏作为参数添加到Freemarker宏

时间:2013-07-17 23:24:10

标签: freemarker

我有下面的代码片段,想要输出< @ 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>

1 个答案:

答案 0 :(得分:1)

那是因为spring.message也应该是FreeMarker函数,而不仅仅是FreeMarker宏。宏没有返回值(它们可能会直接打印到输出编写器作为副作用),因此您无法在需要表达式的位置调用它们。无论如何......现在如何解决这个问题。查看Spring的源代码,也许这将起作用:

<#function message code><#return springMacroRequestContext.getMessage(code)></#function>

您可以创建utils.ftl或其他内容,(自动 - )#importu,然后您可以在模板中执行<@createUserInputItemModifiedv2 ..., u.message("name")>。 (实际上,它可以更方便,所以你可以写msg.name或类似,但不要在这里进行。)

但是,我不确定是否有关于springMacroRequestContext或其内容的任何向后兼容性保证。所以最终这应该在Spring中修复。