枚举
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)
我看到它在根据代码选择枚举时遇到了问题,但我仍然没有弄清楚如何处理它。关于enums的主题有很多,但没有找到任何可以帮助这个的东西。是否有一种方法需要实现枚举来解决它?
答案 0 :(得分:0)
没有看到getArticlePublishStatusOptionList()
的实现,这有点猜测......
如果您使用toString
ArticlePublishStatus
值作为从getArticlePublishStatusOptionList()
返回的Option的值部分,则Spring MVC Enum Converter可以使用.valueOf
绑定您的枚举
答案 1 :(得分:0)
你应该使用
<option value="SUB">Submitted</option>
<option value="PUB">Published</option>
Spring use .valueOf(“SUBMITTED”);将值转换为枚举。它与枚举内部值无关。