【问题标题】:THYMELEAFE: Select of fieldTHYMELEAF:选择字段
【发布时间】:2021-08-25 06:44:24
【问题描述】:

我有两个班:

import java.io.Serializable;
import java.util.Objects;

public class MediaTypeDto implements Serializable {
    private String fileExtension;
    private MediaTypeEnum mediaType;

    public MediaTypeDto()  {
    }

    public MediaTypeDto(String fileExtension, MediaTypeEnum mediaType) {
        this.fileExtension = fileExtension;
        this.mediaType = mediaType;
    }

    public String getFileExtension() {
        return fileExtension;
    }

    public void setFileExtension(String fileExtension) {
        this.fileExtension = fileExtension;
    }

    public MediaTypeEnum getMediaType() {
        return mediaType;
    }

    public void setMediaType(MediaTypeEnum mediaType) {
        this.mediaType = mediaType;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MediaTypeDto that = (MediaTypeDto) o;
        return fileExtension.equals(that.fileExtension) && mediaType.equals(that.mediaType);
    }

    @Override
    public int hashCode() {
        return Objects.hash(fileExtension, mediaType);
    }

    @Override
    public String toString() {
        return "MediaTypeDto{" +
                "fileExtension='" + fileExtension + '\'' +
                ", mediaType='" + mediaType + '\'' +
                '}';
    }
}

import java.io.Serializable;

public enum MediaTypeEnum implements Serializable
{

    WALLPAPER("Fond d'écran"),
    PERSONNAL_PHOTO("Photo personnel"),
    OTHER_IMAGE("Autre photo"),
    MUSIC("Music"),
    AUDIO_BOOK("Livre audio"),
    OTHER_SOUND("Autre son"),
    MOVIE("Film"),
    PERSONNAL_VIDEO("Vidéo personnel"),
    OTHER_VIDEO("Autre vidéo"),
    BOOK("Livre"),
    OTHER_DOCUMENT("Autre document"),
    VIDEO_GAME("Jeux vidéo"),
    FILE_3D("Fichier 3D");

    /*public static final Set<MediaTypeEnum> IMAGE = EnumSet.of(WALLPAPER, PERSONNAL_PHOTO, OTHER_IMAGE);
    public static final Set<MediaTypeEnum> SOUND = EnumSet.of(MUSIC, AUDIO_BOOK, OTHER_SOUND);
    public static final Set<MediaTypeEnum> VIDEO = EnumSet.of(MOVIE, PERSONNAL_VIDEO, OTHER_VIDEO);
    public static final Set<MediaTypeEnum> DOCUMENT = EnumSet.of(BOOK, OTHER_DOCUMENT);
    public static final Set<MediaTypeEnum> PERSONNAL = EnumSet.of(PERSONNAL_PHOTO, PERSONNAL_VIDEO);
*/
    private final String displayValue;

    MediaTypeEnum(String displayValue) {
        this.displayValue = displayValue;
    }

    public String getDisplayValue() {
        return displayValue;
    }

}

在我的控制器中,我有这个请求:

@GetMapping("/create")
    public String create( Model model) {
        model.addAttribute("mediaTypeDto", new MediaTypeDto());
        model.addAttribute("mediaTypeEnum", MediaTypeEnum.class);
        return "createMediaType";
    }

在我的 html 中:

<!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="${mediaTypeDto.fileExtension}"/></p>
    <select name="color" th:field="*{mediaTypeDto.mediaType}">
        <option th:each="mediaTypeEnum : ${T(com.korp.multimedia.entity.MediaTypeEnum).values()}"
                th:value="${mediaTypeEnum}" th:text="${mediaTypeEnum}"></option>
    </select>

    <p><input type="submit" value="Submit"/> <input type="reset" value="Reset"/></p>
</form>

</body>
</html>

当我尝试访问该页面时,我收到以下错误消息:

org.springframework.beans.NotReadablePropertyException: 无效 bean 类的属性“mediaTypeDto” [com.korp.multimedia.entity.MediaTypeDto]:Bean 属性 “mediaTypeDto”不可读或具有无效的 getter 方法:是否 getter 的返回类型是否与 setter 的参数类型匹配?

我不明白为什么它声称属性的 getter 和 setter 不存在

【问题讨论】:

    标签: java spring thymeleaf


    【解决方案1】:

    尝试删除mediaTypeDto.,因为您在表单标记th:object="${mediaTypeDto}" 中引用了它:

    <p>Extention: <input type="text" th:field="${mediaTypeDto.fileExtension}"/></p>
        <select name="color" th:field="*{mediaTypeDto.mediaType}">
    

    到:

    <p>Extention: <input type="text" th:field="${fileExtension}"/></p>
        <select name="color" th:field="*{mediaType}">
    

    可能你还需要将th:field="${fileExtension}" 更改为th:field="*{fileExtension}"

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2019-05-29
      • 2015-01-26
      • 2021-08-08
      相关资源
      最近更新 更多