Thymeleaf使用th:field时表单显示null,如何设置为显示空白?
问题根因分析
该差异是由两种场景下Thymeleaf的渲染上下文完整性不同导致的:
直接访问完整页面时,请求走Spring MVC完整的视图解析流程,Spring绑定的转换器会自动将null字段转为空字符串渲染到input控件中;
用fetch请求加载页面片段时,片段渲染的上下文缺少完整的Spring MVC转换器绑定,Thymeleaf会直接调用字段的toString()方法,null值的toString结果就是字符串null,因此会直接显示在输入框中。
解决方案
方案1:全局配置(推荐)
直接在Spring Boot配置文件中添加如下配置,即可全局生效,所有null值渲染时默认输出空字符串:
如果使用application.properties配置:
spring.thymeleaf.null-string=
如果使用application.yml配置:
spring: thymeleaf: null-string: ''
方案2:针对单个字段修改
如果不需要全局生效,仅要修改指定字段的渲染逻辑,可以用Thymeleaf的Elvis运算符?:覆盖默认的value值,你提供的表单代码修改后如下:
<label for="address1">Address:</label> <input type="text" name="address1" id="address1" th:field="*{address1}" th:value="*{address1} ?: ''"> <br> <label for="address2"> </label> <input type="text" name="address2" id="address2" th:field="*{address2}" th:value="*{address2} ?: ''"> <br>
该写法不会影响th:field原本的name、id自动生成逻辑,仅会在字段为null时将value覆盖为空字符串。
内容的提问来源于stack exchange,提问作者sproketboy
相关产品推荐
相关产品推荐

