Thymeleaf下拉选择绑定MediaTypeDto报属性不可读异常如何解决
问题解决方案
错误原因
你在<form>标签上已经通过th:object="${mediaTypeDto}"绑定了MediaTypeDto类的实例,使用*{}选择器访问属性时,默认直接读取绑定对象的内部属性,不需要再加mediaTypeDto前缀。你写的*{mediaTypeDto.mediaType}会让Spring尝试从MediaTypeDto类中查找名为mediaTypeDto的属性,该属性不存在,因此抛出属性不可读的异常。
修复步骤
修改Thymeleaf页面的表单部分代码,调整两处属性绑定写法:
- 文件扩展名输入框的
th:field可以改为绑定对象的简化写法*{fileExtension} - 下拉选择框的
th:field去掉mediaTypeDto前缀,改为*{mediaType} - (可选优化)下拉选项的展示文本改为枚举类定义的多语言展示值
${mediaTypeEnum.displayValue},前端显示更友好
修正后的完整前端代码如下:
<!DOCTYPE html> <html lang="fr" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="#" th:action="@{/mediaType/create}" th:object="${mediaTypeDto}" method="post"> <p>Extention: <input type="text" th:field="*{fileExtension}"/></p> <select name="mediaType" th:field="*{mediaType}"> <option th:each="mediaTypeEnum : ${T(com.korp.multimedia.entity.MediaTypeEnum).values()}" th:value="${mediaTypeEnum}" th:text="${mediaTypeEnum.displayValue}"></option> </select> <p><input type="submit" value="Submit"/> <input type="reset" value="Reset"/></p> </form> </body> </html>
补充注意
后续编写POST请求接收方法时,需要用@ModelAttribute注解绑定提交的参数,示例写法:
@PostMapping("/create") public String saveMediaType(@ModelAttribute MediaTypeDto mediaTypeDto) { // 处理参数、保存数据的业务逻辑 return "redirect:/success"; // 替换为你实际的跳转路径 }
内容的提问来源于stack exchange,提问作者Zabuza
相关产品推荐
相关产品推荐

