2013-07-17 29 views
0

我有下面的代碼片段,並且想要將來自< @ spring.message「name」/>的輸出作爲paylonter給出(佔位符參數)。添加春季宏作爲Freemarker宏的參數

直接提供它,因爲我試過下面沒有工作,任何人都知道我應該怎麼做?

<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

這是因爲spring.message也應該是一個FreeMarker函數,而不只是一個FreeMarker宏。宏沒有返回值(它們可能直接作爲副作用打印到輸出寫入器),因此無法在需要表達式的地方調用它們。無論如何......現在如何解決這個問題。看着春的源代碼,也許這將工作:

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

您可以創建一個utils.ftl什麼的,(自動)#import它作爲u,然後你可以做你的模板<@createUserInputItemModifiedv2 ..., u.message("name")>。 (實際上,它可以更加方便,這樣就可以只寫msg.name或類似,但我們不要進入這裏。)

但是,我不知道是否有關於springMacroRequestContext或其任何向後兼容的保證內容。所以最終這應該在春季修復。

+0

很酷,謝謝澄清,會測試出來 –