You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf下拉选择绑定MediaTypeDto报属性不可读异常如何解决

问题解决方案

错误原因

你在<form>标签上已经通过th:object="${mediaTypeDto}"绑定了MediaTypeDto类的实例,使用*{}选择器访问属性时,默认直接读取绑定对象的内部属性,不需要再加mediaTypeDto前缀。你写的*{mediaTypeDto.mediaType}会让Spring尝试从MediaTypeDto类中查找名为mediaTypeDto的属性,该属性不存在,因此抛出属性不可读的异常。

修复步骤

修改Thymeleaf页面的表单部分代码,调整两处属性绑定写法:

  1. 文件扩展名输入框的th:field可以改为绑定对象的简化写法*{fileExtension}
  2. 下拉选择框的th:field去掉mediaTypeDto前缀,改为*{mediaType}
  3. (可选优化)下拉选项的展示文本改为枚举类定义的多语言展示值${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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:00:02