我对Freemarker和模板引擎都很新。 基本上我希望能够使用java方法生成两个XML文件(来自两个不同的模板),以将数据提供给模板。
例如:
getRes()
方法为值(例如,返回1)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>
为了理解你所说的话,我需要知道“数据提供者”在我的案例中会是什么样子?我怎样才能在我的地图中获得这个“项目”?我理解原理而不是技术解决方案...
答案 0 :(得分:0)
您的Main
流程负责生成数据(List
,Map
或其他结构化对象),模板将使用数据呈现您的数据个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