我正在研究使用 FreeMarker 编写 EDI 文件。这些基本上是严格格式化(并经过验证)的电子发票。我决定从编写一个简单的示例开始,但一直坚持将其模板化为“嵌套 pojo”。我的意思是一个 POJO,其中包含 POJO,其中这两个 POJO 都在输出中包含我想要的数据。我编写了一个单元测试(独立的),但由于未知原因而失败。当我运行测试时,出现以下异常:
Expression user.getSub is undefined on line 1, column 24 in simple.
The problematic instruction:
----------
==> ${user.getSub().user} [on line 1, column 22 in simple]
----------
Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression user.getSub is undefined on line 1, column 24 in simple.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
<snip>
example.TestFreeMarkerTemplating.testSimpleTemplate(TestFreeMarkerTemplating.java:23)
<snip>
我已经尝试了该模板的许多变体,但尚未成功。这是测试:
package example;
import java.io.*;
import org.junit.Test;
import freemarker.cache.StringTemplateLoader;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.*;
import static org.junit.Assert.*;
public class TestFreeMarkerTemplating {
Configuration cfg = new Configuration();
StringTemplateLoader stringLoader = new StringTemplateLoader();
{ cfg.setTemplateLoader(stringLoader);
cfg.setObjectWrapper(new BeansWrapper()); }
@Test
public void testSimpleTemplate() throws TemplateException, IOException{
stringLoader.putTemplate("simple", "Welcome ${user}. Sub ${user.getSub().user}");
Template temp = cfg.getTemplate("simple");
StringWriter out = new StringWriter();
temp.process(new TestPojo(), out);
assertEquals("Welcome Andy. Sub Bill", out.toString());
}
public static class TestPojo {
private final String user = "Andy";
private final SubPojo sub = new SubPojo();
public String getUser() { return user; }
public SubPojo getSub() { return sub; }
}
public static class SubPojo {
private final String user = "Bill";
public String getUser() { return user; }
}
}
谢谢你的帮助!
您已经设置了TestPojo
实例本身作为数据模型根,因此user
in user.getSub()
is the String
“安迪”,没有getSub
方法。正确的模板是"Welcome ${user}. Sub ${getSub().user}"
。但最好写成"Welcome ${user}. Sub ${sub.user}"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)