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)

我看到它在根据其代码选择枚举时遇到问题,但我仍然不知道该怎么做。有很多关于枚举的主题,但没有找到任何可以帮助这个主题的东西。是否有一种方法需要实现枚举来解决它?

4

2 回答 2

0

没有看到 的实现getArticlePublishStatusOptionList(),这有点猜测......

如果您使用 的toStringArticlePublishStatus作为从 返回的 Option 的值部分getArticlePublishStatusOptionList(),那么 Spring MVC 枚举转换器可以使用 绑定您的枚举.valueOf

于 2012-04-04T02:57:33.187 回答
0

你应该使用

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

春天使用 .valueOf("SUBMITTED"); 将值转换为枚举。它与枚举内部值无关。

请参阅What is the reason for java.lang.IllegalArgumentException: No enum const class 即使迭代 values() 工作得很好?

于 2016-06-15T00:04:53.597 回答