2013-10-10 38 views
0

在一個帶有FreeMarker環境的Spring MVC中,我有一個自定義的TagLib,它處理帶有數據的ftl模板並將結果寫入標記的JSP上下文中。Spring MVC&FreeMarker&Custom TagLib

當我從解析視圖(從控制器呈現的模板意義上)調用此標記時,行爲是完全正確的。

controller 
    -> FTL 
     -> TagLib 

但是,當我把它從模板中由相同標籤的另一個實例處理,我得到了一個錯誤(沒有定義的標籤),當我加入#assign聲明我FTL,我也有一個錯誤(JspTagLibs爲空)。

controller 
    -> FTL 
     -> TagLib 
      -> FTL 
       -> TagLib (crash!) 

我該如何解決這個問題?

在此先感謝

回答

0

撥叫FTL JSP標籤,你需要的是實現了一個特殊的模板上下文(數據模型,在FTL術語)。我假設Spring爲這個初始調用提供了一個這樣的環境。但是,如果您在第二種情況下從新的模板上下文(實際上有新的freemarker.core.Environment)開始,那麼您將不會獲得支持。如果您確實不需要新的模板環境,則可以使用靜態Environment.getCurrentEnvironment()獲得更高的Environment,然後使用Environment. include調用第二個FTL。但是,那麼您將使用與最頂級FTL中相同的一組模板創建的變量。 (如果第二個FTL只是定義了一個宏並調用它,那麼這可能會有所改進,因爲宏至少可以包含當地人)。因此,當您調用第二個FTL時,您可以嘗試重新使用(使用Environment.getDataModel())中的dataModel FTL。我想它應該工作...從來沒有嘗試過。

相關問題