Spring MVC - 将枚举填充到下拉列表中

时间:2014-03-28 04:15:02

标签: spring forms spring-mvc enums jstl

我有一个这样的表格:

<form:form method="POST" action="searchProjects" commandName="projectcriteria">
    <table>
        <tr>
            <td class="label"><spring:message code="number" /></td>
            <td><form:input path="number" /></td>
            <td class="label"><spring:message code="customer" /></td>
            <td><form:input path="customer" /></td>
        </tr>
        <tr>
            <td class="label"><spring:message code="name" /></td>
            <td><form:input path="name" /></td>
            <td class="label"><spring:message code="status" /></td>
            <td>
                <form:select path="status">
                    <option value=""><spring:message code="please_select" /></option>
                    <c:forEach var="enum" items="${allStatus}">
                        <option value="${enum}"><spring:message code="${enum.statusEnum}" /></option>
                    </c:forEach>
                </form:select>
            </td>
        </tr>
        <tr>
            <td colspan="4" style="text-align: center;">
                <input type="submit" value="<spring:message code="search"/>" />
                <input type="button" value="<spring:message code="reset_criteria"/>" />     
            </td>
        </tr>
    </table>
</form:form>

Projectcriteria和StatusEnum是这样的:

public enum StatusEnum {
    INV("Invalidate"),
    TOV("Validate"),
    VAL("Validated"),
    FIN("Finished");

    private String name;

    private StatusEnum(String name) {
        this.name = name;
    }

    public String getStatusEnum() {
        return this.name;
    }
}

public class ProjectCriteria {
    private long number;

    private String name;
    private String customer;
    private StatusEnum status;

    /**
     * @return the number
     */
    public long getNumber() {
        return number;
    }

    /**
    * @param number the number to set
    */
    public void setNumber(long number) {
        this.number = number;
    }
    /**
    * @return the name
    */
    public String getName() {
        return name;
    }
    /**
    * @param name the name to set
    */
    public void setName(String name) {
        this.name = name;
    }
    /**
    * @return the customer
    */
    public String getCustomer() {
        return customer;
    }
    /**
    * @param customer the customer to set
    */
    public void setCustomer(String customer) {
        this.customer = customer;
    }
    /**
    * @return the status
    */
    public StatusEnum getStatus() {
        return status;
    }
    /**
    * @param status the status to set
    */
    public void setStatus(StatusEnum status) {
        this.status = status;
    }
}

如何将ProjectCriteria类中的StatusEnum属性填充到jsp页面。我需要将哪些内容放入控制器?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

在Controller方法中添加枚举值,向各个页面发出请求,即

model.addAttribute("enumValues",StatusEnum.value());

然后使用foreach在下拉菜单中迭代 enumValues

答案 1 :(得分:3)

您可以试试这个(抱歉代码未经测试):

<c:forEach var="enum" items="${StatusEnum.values()}">
    <option value="${enum}"><spring:message code="${enum.name}" /></option>
</c:forEach>

注意:如果您的enum类具有包名称,则可能必须在items属性中包含完全限定的类名。您也可以从控制器传递enum作为模型属性(?)。