2012-10-03 27 views
0

文件testMacro.txt更改要導入的文件中變量的值; Freemarker的

<#import "./importMe.txt" as my> 

<#assign a=0 > 
<@my.macro1 /> 
${a} 

文件importMe.txt

<#macro macro1 > 
${a} 
</#macro> 
從Java文件

現在,當我執行它,它說。

Exception in thread "main" java.lang.RuntimeException: freemarker.core.InvalidReferenceException: Expression a is undefined on line 3, column 3 in importMe.txt at msjava.hdom.examples.DbQuery.main(DbQuery.java:59) Caused by: freemarker.core.InvalidReferenceException: Expression a is undefined on line 3, column 3 in importMe.txt

但是,如果我不這樣做的進口,而是定義文件testMacro.txt內宏觀然後正常工作。

我想要做的是,我想改變價值a文件testMacro.txt中,文件importMe.txt內,使得它被後來在testMacro.txt體現。

謝謝。

回答

1

#import的一個重要點正是它通過給他們自己的命名空間防止模板之間的干擾。所以這就是爲什麼它不起作用。如果您希望模板共享該變量,請使用全局變量:<#global a = 0>而不是#assign。或者,您可以在導入的命名空間中設置變量,如<#assign a = 0 in my>

+0

freemarker函數中沒有任何引用類的東西嗎? – Kraken

+0

沒有。然而,Java對象是通過引用傳遞的,所以對於可變對象,你可以做一些技巧。 – ddekany