簡體   English   中英

Freemarker-從flt模板和Java方法生成xml

[英]Freemarker - generate xml from flt template and java methods

對於Freemarker和模板引擎,我還是一個新手。 基本上,我希望能夠使用java方法將數據饋入模板來生成兩個XML文件(從兩個不同的模板)。

例如:

  • myTemplate1.ftl包含一個以“ getRes()方法作為值的開始和結束“ res”標簽(例如,返回1)
  • myTemplate2.ftl包含一個打開和關閉的“結果”標簽,並采用getResult()方法作為值(例如,返回2)

我如何寫一個類Main來處理它而又不具體(我不想每行寫一行,因為那樣創建引擎就沒有意義了)

如果可以,請通過示例幫助我了解它的工作原理嗎?

問候

編輯所有新信息:

@fustaki這非常令人沮喪。 看來我需要逐步了解自己在做什么。 所以...這是我所在位置的一個非常愚蠢的例子:

template1.ftl

<Email>${item.getEmail()}</Email><Language>${item.getLanguage()}</Language>

FillMyTemplate1.java

public String getEmail(){ return "test@test.com" }
public String getLanguage(){ return "EN" }

我正在使用屬性文件以便使用自省:prop.properties,其中包含:template1 = fr.freemarker.test.xml.FillMyTemplate1

MainTest.java

public static void main(String[] args) throws Exception {
 Properties prop = new Properties();
 InputStream input = new FileInputStream("prop.properties");
 prop.load(input);
 Class<?> classe = Class.forName(prop.getProperty(args[0])); //where args[0] is "template1"

 Configuration config=new Configuration();
 config.setClassForTemplateLoading(MainTest.class, "templates");
 config.setObjectWrapper(new DefaultObjectWrapper());
 Template template=config.getTemplate(args[0]+".ftl");

 Map<String, Object> dataModel = new HashMap<String, Object>();
 Writer consoleWriter = new OutputStreamWriter(System.out);
 dataModel.put("item", classe.newInstance());
 template.process(dataModel, consoleWriter);

}

結果為: <Email>test@test.com</Email><Language>EN</Language>

為了理解您所說的話,我需要知道“數據提供者”在我的情況下是什么樣子? 如何在我的地圖上乘坐該“物品”? 我了解原理但不了解技術解決方案...

您的Main流程負責生成數據( ListMap或其他結構化對象),並且模板將使用該數據來呈現XML。 模板中使用的標簽與其內部數據無關。

數據存儲在可以使用getItems()檢索的List中的示例,或者通常可以從freemarker引擎訪問的示例。

<?xml>
<res>
    <#list items as item >
        <item>${item}</item>
    </#list>
</res>

您可以使用相同的List items創建任意數量的模板( 視圖 )。

我希望這可以解決您的麻煩。

這是freemarker的好例子。 此應用程序使用freemarker模板生成spring mvc crud操作。 springmvcfreemarker

暫無
暫無

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

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