Freemarker - 从flt模板和java方法生成xml

时间:2017-05-17 14:31:46

标签: java xml templates freemarker

我对Freemarker和模板引擎都很新。 基本上我希望能够使用java方法生成两个XML文件(来自两个不同的模板),以将数据提供给模板。

例如:

  • myTemplate1.ftl包含一个打开和关闭“res”标记,其中getRes()方法为值(例如,返回1)
  • myTemplate2.ftl包含一个打开和关闭的“result”标记,并将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包含:     模板1 = 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>

为了理解你所说的话,我需要知道“数据提供者”在我的案例中会是什么样子?我怎样才能在我的地图中获得这个“项目”?我理解原理而不是技术解决方案...

2 个答案:

答案 0 :(得分:0)

您的Main流程负责生成数据(ListMap或其他结构化对象),模板将使用数据呈现您的数据个XML。 模板中使用的标签独立于其中的数据。

数据存储在List中的示例可以通过getItems()检索,或者通常可以从freemarker引擎访问。

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

您可以使用相同的List items创建任意数量的模板(视图)。

我希望这能澄清你的烦恼。

答案 1 :(得分:0)

这是freemarker的一个很好的例子。此应用程序生成spring mvc crud操作 使用freemarker模板。 springmvcfreemarker