0

列挙

public enum ArticlePublishStatus {
    DRAFT ("DRAFT"),
    SUBMITTED ("SUB"),
    PUBLISHED ("PUB");

    private final String code;

    private ArticlePublishStatus(String code) {   
        this.code=code;   
    }   
}

画面オブジェクト (別名フォーム バッキング オブジェクト)

public class ArticleHeaderEditScreenObject extends EditScreenObject {
    private Integer articleId;
    private String title;
    private ArticlePublishStatus publishStatus;

意見

<form:select path="publishStatus"
    items="${screenObject.getArticlePublishStatusOptionList()}" 
    itemLabel="label" 
    itemValue="value" />

html

<select id="publishStatus" name="publishStatus">
    <option value="DRAFT" selected="selected">Draft</option>
    <option value="SUB">Submitted</option>
    <option value="PUB">Published</option>
</select>

例外

対応する列挙型の名前とコードが同じであるため、ドラフトは正常に機能します。送信済みまたは公開済みのページの保存に失敗します。

org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type com.siteadmin.domain.ArticlePublishStatus for value 'PUB'; nested exception is java.lang.IllegalArgumentException: No enum constant com.siteadmin.domain.ArticlePublishStatus.PUB

org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)

java.lang.IllegalArgumentException: No enum constant com.siteadmin.domain.ArticlePublishStatus.PUB java.lang.Enum.valueOf(Enum.java:236)

コードに基づいて列挙型を選択する際に問題があることがわかりましたが、どうすればよいかまだわかりません。列挙型についてはたくさんありますが、これに役立つものは何も見つかりませんでした。enum に対処するために実装する必要があるメソッドはありますか?

4

2 に答える 2

0

使用する必要があります

<option value="SUB">Submitted</option>
<option value="PUB">Published</option>

春の使用 .valueOf("SUBMITTED"); 値を列挙型に変換します。enum 内部値とは関係ありません。

java.lang.IllegalArgumentException: No enum const class even if iterating through values() works well? の理由を参照してください。

于 2016-06-15T00:04:53.597 に答える