渲染传递给模板

时间:2015-10-09 01:27:53

标签: java stringtemplate-4

我是一个非常基本的StringTemplate新手。我正在尝试利用此功能发送自动发送的电子邮件。我尽可能多地阅读消化那里的东西。我从一个简单的测试用例开始,无法获取要渲染的对象的属性。作为测试用例,我在模板文件email.stg中有以下内容。

delimiters "$", "$"
activate(person) ::= <<$person.personFirstName$>>

我正在尝试传递Person对象并让模板呈现personFirstName属性。这将调用getter Person.personFirstName(),它是公共的。

我的java代码如下:

Person _thePerson = //fetched from database
STGroup group = new STGroupFile(/tmp/email.stg); 
ST st = group.getInstanceOf("activate");
st.add("person", _thePerson);
System.out.println("the person first name is: " + _thePerson.personFirstName());
System.out.println(st.render());

我的输出反映了personFirstName属性可以通过java获得,但我的模板不会呈现它。

the person first name is: Ivan
<nothing is returned here>

如果我将激活模板限制为:

activate(person) ::= <<$person$>>

我得到以下结果,其中person对象呈现为_thePerson.toString()。

the person first name is: Ivan
999999999 - Johnson, Ivan G

任何帮助都会非常感激,所以我可以继续使用我想要的更复杂的模板。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:我认为这是导言的答案 - https://theantlrguy.atlassian.net/wiki/display/ST4/Introduction

  

“...通常它们遵循旧的JavaBeans命名约定.StringTemplate首先查找方法getP(),isP(),hasP()。如果找不到其中一个方法,它会查找一个名为p“。

我认为这意味着“p”也可以作为一个方法名称,但是错了。我正在使用Enterprise Object Framework,不幸的是,我的模型.java文件的属性访问器不使用“get *”约定,这意味着ST从不请求它们。它们也不存储为字段。我将不得不考虑解决方法,但我认为我不倾向于改变大规模模型框架来适应这种情况。如果我添加cover(get *)方法,它可以工作,但这不是最好的解决方案。

通常,我从未遇到过这个问题,因为WebObjects模板引擎会在有或没有“get *。”的情况下呈现。