私はすべての時間を起きていないような奇妙な問題に実行しているんだけど、それがないとき、それは次のようになります。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)
...
ラインで
<#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);
}
それは、このようなルックスを失敗していますbar.ftl私にとっては、すべてが正しく返されているように見え、コードは正しく設定されているようです。私はFreeMarker 2.3.16とSpring MVCを使用しています。ほとんどの場合は動作するようですが、時には失敗します...
アイデア?
私の例は、ファイル名をそれぞれfooとbarに置き換えた以外は正確で実際です...私はあなたとChssPly76の両方が助けてくれたと思いますここに。おそらく並行性の問題だと私は同意する。救済策はありますが、私はChssPly76の提案に目を向けると思いますし、解析パターンを全く使わないでください。私はこれも日付形式のキャッシュを避けると仮定していますか? – Galen
私はFreeMarkerバージョン2.3.16を使用しています。より新しいバージョンへの移行は潜在的に助けになるでしょうか? – Galen
'Date'を' String'に変換するときにも使われるので、日付形式のキャッシュは避けられません。しかし、問題が 'parse'メソッドに固有のものであれば、それは回避されます。 2.3.16からのアップグレードは役に立ちません。なぜなら、このバグはFreeMarkerのバグだと思いますが、それはこれまで知られていませんでした。 – ddekany