我正在尝试使用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'
答案 0 :(得分:2)
pattern
是input
代码的 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。