나는 모든 시간을 발생하지 않는 것 같습니다 이상한 문제로 실행 해요,하지만 그렇게되면, 그것은 다음과 같습니다프리 마커 날짜 지정은 실패
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
FreeMarker 버전 2.3.16을 사용 중입니다. 잠재적으로 새로운 버전으로 이전하겠습니까? – Galen
'Date'를'String'으로 변환 할 때도 사용되기 때문에 날짜 형식의 캐시는 피할 수 없습니다. 그러나, 문제가'parse' 메쏘드에 특정한 것이라면, 그것을 피합니다. 이 버그 (FreeMarker 버그 인 경우)가 지금까지 알려지지 않았기 때문에 2.3.16에서 업그레이드하는 것이 도움이되지 않습니다. – ddekany