Spring 选择多个枚举列表

Spring 选择多个枚举列表,spring,jsp,binding,enums,Spring,Jsp,Binding,Enums,如何在多重选择中绑定枚举列表 下面是我的类属性(带有getter/setter): 私有列表颜色; 这是我的jsp: <form:select id="colors" path="colors" multiple="true"> <form:option value="" label="..."/> <form:options items="${Color.values}" /> </form:select> 我无法将枚举值作为数组

如何在多重选择中绑定枚举列表

下面是我的类属性(带有getter/setter):

私有列表颜色;
这是我的jsp:

<form:select id="colors" path="colors" multiple="true">
  <form:option value="" label="..."/>
  <form:options items="${Color.values}" />
</form:select>

我无法将枚举值作为数组获取,因为它是空的


感谢阅读。

您似乎认为
${Color.values}
将调用静态
Color.values()
方法。这是不正确的

在JavaEE7(Tomcat8)之前,JSPEL中不支持静态方法
${Color.values}
将搜索名为
Color
的属性,如果找到,则在此对象上调用
getValues()
。因为在任何范围内都没有这样的对象,所以在选择框中没有任何选项

要执行所需操作,只需从Spring控制器中调用
Color.values()
,并将其添加到模型中,例如,在
allColors
属性名称下。然后使用

<form:options items="${allColors}" />

在JSP中


如果您使用的是Java EE 7,则可以在JSP中导入Color类,并使用
${Color.values()}

尝试以下方法以列表形式获取枚举:

List<Color> colors = Arrays.asList(Color.values());
或者让getter立即返回数组或列表:

    public Color[] getColors(){
        return Color.values();
    }
名单

public List getColorList(){
返回Arrays.asList(Color.values());
}

您似乎试图以静态方式访问方法“值”,这对我来说很奇怪,因为属性“colors”不是静态的。“Color.values”来自枚举类Color。我向您展示的类用作表单binding.OK的commandObject。现在看起来更清楚了^^:)我找到了一些方法来解决这个问题,我通过控制器中的modelAttribute给出枚举值。把它贴在那里:谢谢你的回答。请看我的评论。我描述了当用户提交表单时,表单bacing对象中的枚举列表没有填充。调用
Color.values()
-的问题是OP的问题,但我当然从控制器设置了所有枚举值。还有表单支持对象的所有其他属性,问题只存在于填充枚举列表中。但是multiselect参数发送得很好-我在FireBugI中看到multiselect的所有选定值,我无法重现这个问题。您应该创建自己的问题,并显示表单、控制器和命令bean。在我刚刚尝试过的一个简单的例子中,这一切都很好。
    public enum Color {
        blue,
        red;
    }
    public Color[] getColors(){
        return Color.values();
    }
    public List<Color> getColorList(){
        return Arrays.asList(Color.values());
    }