5

次のような select タグを使用してフォームを作成しています。

<form th:object="${version}" method="post" class="form-horizontal">
    ...
    <div class="control-group" th:classappend="${#fields.hasErrors('product')} ? 'error'">
        <label class="control-label" for="product" th:text="#{version.product}">Product</label>
        <div class="controls">
            <select id="product" th:field="*{product}">
                <option value="" th:text="#{common.select.prompt}"></option>
                <option th:each="p : ${productList}" th:value="${p.id}"  th:text="${p.name}"></option>
            </select>
            <span class="help-inline" th:errors="*{product}"></span>
        </div>
    </div>
    ...
</form>

DomainClassConverterのクラスは、フォームを送信するときに選択したものをエンティティにSpring Data JPA自動変換するのに役立ちます。また、null であってはなりません (クラスのフィールドで使用しています。idProductproduct@NotNullproductVersion

私が抱えている問題 - データを編集するために戻ったときに、Productが選択されていません。

このように変更するとselectth:fieldおよびth:errors):<-- p.s. is not a sad smile

<select id="product" th:field="*{product.id}">
    <option value="" th:text="#{common.select.prompt}"></option>
    <option th:each="p : ${productList}" th:value="${p.id}" th:text="${p.name}"></option>
</select>
<span class="help-inline" th:errors="*{product.id}"></span>

その後、編集するために戻ったときに選択されますが、バリデーターは機能しません (product選択された id が であっても、常にインスタンス化されますnull)。

非常に一般的なシナリオ (リストからエンティティを選択する) のように見えますが、見栄えの良い例は見つかりません。秘密の知識を共有してください。

4

1 に答える 1

3

解決しました。equals()メソッドとメソッドをオーバーライドしていなかったため、問題が発生しましたhashCode()

于 2013-03-06T04:51:37.760 に答える