0

我有下面的代码片段,并希望将 <@spring.message "name"/> 的输出作为宏的参数(占位符参数)。

直接提供它,因为我在下面尝试做没有用,有人知道我应该怎么做吗?

<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>
4

1 回答 1

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 中修复。

于 2013-07-18T12:41:47.347 回答