Spring MVC表单:radiobuttons标签不设置值属性

时间:2013-06-22 21:32:50

标签: java jsp spring-mvc enums radio-button

以下是我的控制器的相关代码:

@ModelAttribute("store_location_types")
public StoreLocationType[] getStoreLocationTypes() {
    return StoreLocationType.values();
}

以下是StoreLocationType的定义,在同一个控制器中定义:

private enum StoreLocationType {
    PHYSICAL("Physical"),
    ONLINE("Online");

    private String displayName;
    private String value;

    private StoreLocationType(String displayName) {
        this.displayName = displayName;
        this.value = this.name();
    }

    public String getDisplayName() {
        return this.displayName;
    }

    public String getValue() {
        return this.value;
    }
}

以下是相关的JSP代码:

        <li>
            <label>Location Type:</label>
            <form:radiobuttons path="StoreLocationType" items="${store_location_types}" itemLabel="displayName" itemValue="value"/>
        </li>

以下是呈现页面时生成的内容:

    <li>
        <label>Location Type:</label>            
        <span>
            <input id="StoreLocationType1" name="StoreLocationType" type="radio" value="">                         
            <label for="StoreLocationType1">Physical</label>
        </span>
        <span>
            <input id="StoreLocationType2" name="StoreLocationType" type="radio" value="">       
            <label for="StoreLocationType2">Online</label>
        </span>
    </li>

我没有使用枚举的“value”字段填充值属性。我在这做错了什么?我期望看到的是:

        <span>
            <input id="StoreLocationType1" name="StoreLocationType" type="radio" value="PHYSICAL">                         
            <label for="StoreLocationType1">Physical</label>
        </span>
        <span>
            <input id="StoreLocationType2" name="StoreLocationType" type="radio" value="ONLINE">       
            <label for="StoreLocationType2">Online</label>
        </span>

输入标记的value属性应该是StorLocationType.ONLINE.getValue()的值

2 个答案:

答案 0 :(得分:1)

我在代码中找不到任何问题。当我测试它运作良好。

但是在这种情况下你可以用更简单的方式做到这一点。您无需在枚举中添加value字段。如果省略itemValue的{​​{1}}属性,则Spring会将枚举实例的名称设为<form:radiobuttons>属性的值。

所以你可以这样做。

枚举

itemValue

JSP

private enum StoreLocationType {
    PHYSICAL("Physical"),
    ONLINE("Online");

    private String displayName;

    private StoreLocationType(String displayName) {
        this.displayName = displayName;
    }

    public String getDisplayName() {
        return this.displayName;
    }
}

答案 1 :(得分:0)

我使用多个radiobutton标签而不是单个radiobuttons标签解决了它。

以下是JSP的代码:

<c:forEach var="item" items="${store_location_types}">
    <form:radiobutton path="StoreLocationType" value="${item.value}"/>${item.displayName}
</c:forEach>

我使用了数据库中的普通对象,所以在我的情况下,值是Id,显示的字符串是描述。但这也适用于枚举。