我运行到这似乎并没有发生的事情一个奇怪的问题,但是当它,它看起来像这样:Freemarker的日期分配看似有效期失败
Error: on line 60, column 31 in foo/bar.ftl
Expecting a date here, found: 2011-12-29 04:37AM
The problematic instruction:
----------
==> assignment: createDate=project.createdTime?datetime("yyyy-MM-dd hh:mma") [on line 60, column 9 in foo/bar.ftl]
----------
Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Error: on line 60, column 31 in foo/bar.ftl
Expecting a date here, found: 2011-12-29 04:37AM
at freemarker.core.BuiltIn$dateBI$DateParser.parse(BuiltIn.java:334)
at freemarker.core.BuiltIn$dateBI$DateParser.get(BuiltIn.java:305)
at freemarker.core.BuiltIn$dateBI$DateParser.exec(BuiltIn.java:316)
at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Assignment.accept(Assignment.java:90)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
...
的线bar.ftl其中它的失败看起来像这样:
<#assign createDate = project.createdTime?datetime("yyyy-MM-dd hh:mma")>
在Project.java代码吸气看起来是这样的:
private Date createdTime;
...
public String getCreatedTime() {
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd hh:mma");
return createdTime == null ? null : sm.format(createdTime);
}
所以对我来说,它看起来像一切都正确返回,并且代码设置正确。我正在使用FreeMarker 2.3.16和Spring MVC。它似乎大部分时间工作,但有时会失败...
想法?
我的例子是确切和真实的,除了我分别用foo和bar替换文件名...我认为你和ChssPly76都帮助我这里。我同意这可能是一个并发问题。虽然是一个创可贴的解决方案,但我认为我会采用ChssPly76的建议,并避免使用解析模式。我假设这也会避免日期格式缓存? – Galen 2012-01-04 17:01:24
我在FreeMarker 2.3.16版本上。移动到新版本可能有帮助吗? – Galen 2012-01-04 17:13:31
它不会避免使用日期格式缓存,因为在将日期转换为字符串时也会使用它。但是,如果问题特定于'parse'方法,那么它会避免它。从2.3.16升级将无济于事,因为此错误(如果它是FreeMarker错误)至今仍是未知数。 – ddekany 2012-01-04 18:20:04