1

ここに私のコントローラーからの関連コードがあります:

@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>

値属性に、列挙型の「値」フィールドが入力されていません。ここで何が間違っていますか?私が期待するのはこれです:

        <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>

input タグの value 属性は、StorLocationType.ONLINE.getValue() の値である必要があります。

4

2 に答える 2

1

あなたのコードに問題は見つかりません。テストしたところ、うまくいきました。

ただし、場合によっては、より簡単な方法でそれを行うことができます。value列挙型にフィールドを追加する必要はありません。itemValueSpringのattributeを省略した場合、 attribute<form:radiobuttons>の値にはenumのインスタンス名が入りitemValueます。

だからあなたはこのようにすることができます。

列挙型

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

    private String displayName;

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

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

JSP

<label>Location Type:</label>
<form:radiobuttons path="StoreLocationType" 
    items="${store_location_types}" itemLabel="displayName" />
于 2015-10-22T07:44:11.190 に答える