2012-04-04 5 views
0

列挙Spring MVCでコード付きenumを使用するには?

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のテーマにはたくさんのことがありますが、これを助けるものは何も見つかりませんでした。それに対処するためにenumの実装が必要な方法はありますか?あなたはオプションの値の一部としてArticlePublishStatustoString値を使用した場合getArticlePublishStatusOptionList()の実装、推測のこのビットを見てアウトして

答えて

0

...

は、その後、Spring MVCの列挙型コンバータgetArticlePublishStatusOptionList()から返さ.valueOfを使用してenumをバインドできます。

関連する問題