带有th:pattern的<input />日期的Thymeleaf错误

时间:2013-05-13 19:52:21

标签: java spring-mvc thymeleaf

我正在尝试使用th:pattern作为日期输入表单字段,如下所示使用 spring-mvc thymeleaf 模板,但没有运气。其他人经历过类似的事情并且有一些见解或替代方案吗?

我试过1 。对模式进行硬编码

<input type="text" th:pattern="MM/dd/yyyy" th:field="*{classDate}"/>

收到错误:

Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "MM/dd/yyyy" 

和2 。在java代码中设置模式以供使用的模板

<input type="date" th:pattern="${classdate_format}" th:field="*{classDate}"/>

收到错误:

Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring3.processor.attr.SpringInputGeneralFieldAttrProcessor'

1 个答案:

答案 0 :(得分:2)

patterninput代码的 html5 属性。

pattern使用 regex 验证input值。因此,您在pattern属性中插入的值应该是正确的 regex 模式。

如果您使用的是 Thymeleaf th:前缀,模板处理器会尝试在 Spiring 的模型中找到合适的变量,并将其作为值插入属性。 Thymeleaf正在使用 Spring EL 作为模板。

所以你的第一种方法是错误的,因为使用了无效的SpringEL表达式。

第二种解决方案看起来更好,type="date"可以为您提供您想要的内容,但可以not for all browsers${classdate_format}看起来像正确的表达。要了解导致第二个错误的原因,需要更多代码。

无论如何,是否有理由对th:属性使用pattern前缀?只有在服务器端动态创建正则表达式模式时才需要它。但在这种情况下,正则表达式模式非常简单,因此您可以使用不带th:的属性。要为您的案例编写正确的正则表达式,请参阅this answer