我们的团队一直在遇到速度模板问题。 渲染后,有些人抛出RuntimeException并显示消息“ Template.merge()失败-无法渲染Velocity模板'/template.vm'”。 我们无法重现该问题,并且网络上的文档还远远不够。 问题并非始终可再现-有时渲染会导致错误的相同模板也可以在其他时间成功显示。 Template类的源代码也几乎没有帮助。 先感谢您。


编辑:基于Nathan Bubna的回复,我需要澄清一下,我们使用的是Velocity 1.4版。


编辑:由于有人指出堆栈跟踪将是有益的,这里是:

2008-09-15 11:07:57,336错误速度-Template.merge()失败。 该文档为空,很可能是由于解析错误。 2008-09-15 11:07:57,336错误VelocityResult-无法呈现速度模板,'/ search / [template-redacted] .vm'java.lang.Exception:Template.merge()失败。 该文档为空,很可能是由于解析错误。 在com.opensymphony.webwork.dispatcher.VelocityResult.doExecute(VelocityResult.java:91)在org.apache.velocity.Template.merge(Template.java:277)在com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport) .java:109)com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:258)com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182)com.opensymphony.xwork.interceptor.AroundInterceptor。在com.opensymphony.xwork上com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)上拦截(AroundInterceptor.java:35)在com.opensymphony.xwork上com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) com处com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)处的com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)处com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)处的。 opensymp 在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)处的hony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java: 35)在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)的com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)的com.opensymphony.webwork.dispatcher的.java:164)。 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)的javax.servlet.http.HttpServlet.service(HttpServlet.java:802)的ServletDispatcher.service(ServletDispatcher.java:237) .catalina.c 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)的ore.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 202)在org.nanocontainer.nanowar.webwork2.PicoObjectFactoryFilter.doFilter(PicoObjectFactoryFilter.java:46)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)在org.apache.catalina.core.ApplicationFilterChain org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)的org.nanocontainer.nanowar.ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:44)的.internalDoFilter(ApplicationFilterChain.java:202)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)的com.bostoncapital.stuyvesant.RememberUserNameFilter的catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)。 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)处的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)处的doFilter(RememberUserNameFilter.java:30) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)上的.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java :482)位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526),位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)位于org.apache.catalina.valves。 org.org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)的org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)的ErrorReportValve.invoke(ErrorReportValve.java:105) .apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)位于org.apache.coyote org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)的.http11.Http11Protocol $ Http11ConnectionHandler.processConnection(Http11Protocol.java:738)在org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt (LeaderFollowerWorkerThread.java:80)在org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run(ThreadPool.java:684)在java.lang.Thread.run(未知源)

===============>>#1 票数:3 已采纳

您正在使用什么版本的Velocity? 导致此问题的是旧版本中的某些竞争条件。 大多数都被压缩在Velocity 1.5版本中。 虽然我个人建议使用Velocity 1.6-beta1。 它极大地提高了性能(内存和速度),并且修复了许多小错误,这些错误并未使它变成1.5。

编辑:由于您说您正在使用1.4,那么,是的,我确定这是我们修复的比赛条件。 请考虑升级。 1.6绝对是您最好的选择,因为它可以修复您的错误并提高性能。 1.6决赛应该很快出来。

===============>>#2 票数:1

我现在正在我们的网站上处理同一错误。

它似乎确实是一个竞争条件:我可以使用多个进程来读取同一页面,从而始终如一地重现它,但是如果我对请求进行序列化,则永远不会重现它。

我正在使用velocity-1.5; 我尝试迁移到1.6-beta1,但看到其他错误。

解决 :请参阅下面的评论

===============>>#3 票数:0

我已经通过电子邮件发送了代码的作者,以查看他们是否可以提供一些见解。 我将确保分享我学到的任何东西。

===============>>#4 票数:0

由于源中的注释已经说明了这种情况不应该发生,因此我认为这是Template软件中的错误。 将错误报告提交给编写该报告的人。

===============>>#5 票数:0

您需要获取RuntimeException及其原因的完整堆栈跟踪。

请编辑您的答案以添加该信息。

  ask by Lyudmil translate from so

未解决问题?本站智能推荐:

1回复

速度Java模板因Javascript元素而失败

我正在使用速度模板生成HTML JS脚本代码。 我的问题是,对于以下代码段,当我尝试分配图像源元素时遇到错误,因为速度将其视为对象间接。 我如何使速度不这样做?
1回复

速度模板合并方法采用StringWriter,但增益大小不足

我正在尝试使用Apache POI从包含5000多个行和10多个工作表的Excel文件中读取数据,我获取所有列和行值并将其存储在ArrayListMultiMap>中,此逻辑工作得很好,然后将其存储VelocityContext中的对象是这样的: 我需要在速度模板中使用此集合,为此
5回复

速度模板和JavaScript

我尝试将javascript添加到我的力度模板中。 但我收到以下错误: 如果我删除了javascript脚本,则会成功加载网页。 谁能解释为什么? 我认为如果使用速度模板,javascript不起作用。
2回复

如何配置Velocity模板引擎以避免合并结果中的自动回车?

我正在使用Velocity (1.5)使用模板+数据源生成一些文本。 我需要处理新的行,因为合并结果不是HTML而是文本。 我有这种模板(beanInContext是一个数据矩阵,就像一个excel电子表格) 我希望合并结果是这样的: 但我有类似的东西: 当使
1回复

速度模板DateFormat

转换日期格式时出现问题,但连接时出现问题。 这是在Velocity Template中使用的代码。 输出:这不起作用 输出:效果很好--output == 1200 @ 2012年星期四 输出:效果很好12/12/2012
1回复

速度模板定位

我正在执行一项任务,该任务使用Velocity从模板生成电子邮件。 我的要求之一是根据用户提交的Locale对电子邮件进行本地化。 我已经使用Velocity的ResourceTool插入MessageBundle来完成大部分工作。 另一个要求是我只能有一个模板-我不希望每种语言或地区使用
4回复

速度,不同的模板路径

有谁知道是否有可能从速度不同的路径获取模板? 初始化后,Velocity拒绝更改“file.resource.loader.path”。 这是我的代码: 模板可以位于不同的位置(用户可以选择带有文件对话框的模板)。 所以我在从速度中取出模板时有这个代码 这不起作用。
1回复

找不到速度模板

我正在尝试在Spring MVC网站内使用Velocity来模板化电子邮件。 我相信,如果Velocity可以找到我要使用的模板,一切都会很好。 我在/WEB-INF/emails/faultNotification.vm有一个模板。 在我的代码中,我有: 在我的XML中,我有以下
1回复

从速度模板获取参数

我有这样的问题。 我正在为我的应用程序编写集成测试。 在应用程序中,我为用户发送了一些邮件。 创建电子邮件时,我使用Velocity模板。 模板示例: 您好$ {user}! 邮件示例: 嗨,用户! 当我编写集成测试时,我想从收到的电子邮件中解析参数。
1回复

速度模板调试和Catch异常

如何在运行时在Velocity模板中打印确切的例外行? 我正在使用Veloeclipse进行开发以验证与语法有关的问题。此方法有效,但是缺少基于运行时的异常信息。 我正在向VT上下文发送日志记录对象,因此当我想记录某些内容时,我使用$logging.log(contenttobelo