Spring CRUD应用中Thymeleaf转换String日期格式报错求助
解决方案
方法1:使用Thymeleaf的#temporals工具类(推荐)
Thymeleaf的#dates工具类确实没有parse(String, String)方法,你需要使用针对Java 8+时间API的#temporals工具类来处理字符串格式的日期转换:
<p><strong>Contracted From:</strong> <a th:text="${#temporals.format(#temporals.parse(employee.contractedFrom, 'yyyy-MM-dd'), 'dd-MMM-yyyy')}"></a> </p>
注意:
- Spring Boot项目默认已包含Thymeleaf的Java 8扩展,无需额外依赖
- 如果需要强制显示英文月份缩写,可在格式化时指定Locale:
<a th:text="${#temporals.format(#temporals.parse(employee.contractedFrom, 'yyyy-MM-dd'), 'dd-MMM-yyyy', new java.util.Locale('en'))}"></a>
方法2:在实体类中添加格式化字段的getter
如果不想在模板中写复杂表达式,可在Employee实体类中添加自定义getter,直接返回格式化后的字符串:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; // 实体类原有代码... public String getFormattedContractedFrom() { if (contractedFrom == null) { return ""; } DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.ENGLISH); LocalDate date = LocalDate.parse(contractedFrom, inputFormatter); return outputFormatter.format(date); }
之后在模板中直接调用该getter:
<p><strong>Contracted From:</strong> <a th:text="${employee.formattedContractedFrom}"></a> </p>
错误原因说明
你遇到的EL1004E错误,是因为org.thymeleaf.expression.Dates类确实没有parse(String, String)方法——它的parse方法仅支持java.util.Date相关的输入转换。而#temporals是专门为Java 8的java.time包设计的工具类,支持字符串到日期对象的解析操作。
内容的提问来源于stack exchange,提问作者Kayd Anderson
相关产品推荐
相关产品推荐

