我在使用Velocity模板时遇到了一个问题。它正在为我的模板中使用的foreach函数的Directive.postRender
抛出NullPointerException
。
奇怪的行为是,使用完全相同的模板和相同的输入数据,Velocity能够成功完成评估过程<它失败了,说百分之一>
有人能分享见解吗?提前感谢!
版本:Velocity 1.7
java.lang.NullPointerException: null
at org.apache.velocity.runtime.directive.Directive.postRender(Directive.java:202) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.directive.Foreach.clean(Foreach.java:489) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:443) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.RuntimeInstance.render(RuntimeInstance.java:1378) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.runtime.RuntimeInstance.evaluate(RuntimeInstance.java:1314) ~[velocity-1.7.jar:1.7]
at org.apache.velocity.app.Velocity.evaluate(Velocity.java:254) ~[velocity-1.7.jar:1.7]
通过使用Velocity.init()
更改代码来修复至
VelocityEngine vc = new VelocityEngine();
vc.init();
第一个是单例实现,Velocity在多线程模式下可能会丢失一些数据。通过将其更改为对每个pdf生成调用使用新实例,它就像一个魅力。
谢谢!