簡體   English   中英

自省或操縱Freemarker模板

[英]Introspection or manipulation of Freemarker template

我正在使用“動態” Freemarker模板,這意味着可以根據用戶提交的輸入進行更改的模板。 我希望能夠做兩件事:

  1. 檢查模板的語法分析樹以查看其包含的內容,尤其是標識符和$ {variables}。
  2. 操作該解析的樹,添加/刪除元素。

現在,我通過一些丑陋的正則表達式和字符串操作來完成此操作。 這很丑陋且容易出錯,所以我很想利用Freemarker的Java模板表示形式。

根據JavaDoc,Template.getRootTreeNode似乎是我想要的開始:我可以檢索模板的DOM類解析樹,即TemplateElement的實例。 但是TemplateElement的許多具體實現不是公開的。 JavaDoc甚至沒有記錄TemplateElement。 看來我可以從TemplateElement獲得有用信息的唯一方法是編寫駐留在Freemarker軟件包中的代碼。 是否有Freemarker祝福的方式來檢查模板?

理想情況下,我們將擁有有關TemplateElement層次結構的適當文檔,並將其子類公開。 雖然那不能讓我直接修改模板,但至少可以讓我檢查模板的元素。

幾年前還提出了以下問題,但結果有限:

如何自檢freemarker模板以找出其使用的變量?

更新

我已經啟動了一個Github開源項目,以對已解析的Freemarker模板進行自省,以允許我上面討論的那種程序分析和操縱。 歡迎反饋:

freemarker的內省

FreeMarker當前沒有發布的用於檢查模板的API,更不用說對其進行修改了。 它會很有用,但沒有它。 因此,我想知道您是否可以從另一個角度解決問題。 您說您是在動態生成模板,除非模板本身是用戶提交的,否則您可以存儲用戶提交的信息(而不是模板本身...)或模板之類的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM