6

Spring MVCアプリケーションを使用していますが、JSPページで同じ名前の複数の動的フォーム要素をオブジェクトクラスに正常にマップする方法を考えています。例えば:

私のlocations.jspページには、複数のドロップダウンボックスがあります。

<form id="tabs-3-form">
    <input id="locations-1" name="location" />
    <input id="locations-2" name="location" />
    <input id="locations-3" name="location" />
    ... (more can be added or deleted dynamically by user)
</form>

jQueryを使用してフォームをコントローラーにPOSTしています。

$("#tabs-3-form").submit(function() {
    $.ajax({
        type: 'POST',
        url: '/searchResults',
        data: $(this).serialize(),
        dataType: 'json',
        success: function(data) {
           ...
        }
    });
    return false;
});

私のLocationsController.javaは次のように設定されています。

@RequestMapping(value = "/locationResults", method = RequestMethod.POST)
public @ResponseBody LocationsCollection locationsCollection
(
    @ModelAttribute(value = "location") Location location,
    BindingResult result
) 
{   
    LocationsCollection locationsCollection = new LocationsCollection();
    locationsCollection.addLocation(location);

    // Anything else to do here?

    return locationsCollection;
}

LocationsCollection.javaLocationオブジェクトのリストが含まれているだけです。

入力フィールドの名前に角かっこを追加する必要がありますか?MVCは、他のフォーム要素と同様に、リストへのマッピングを自動的に行いますか?誰かが例を提供することができれば、私はそれをいただければ幸いです。

4

2 に答える 2

3

http://lifeinide.blogspot.com/2010/12/dynamic-forms-lazylist-and-transparent.html?showComment=1355160197390#c6923871316812590644の例に従って、動作させることができました。

しかし、私は1つの調整を行いました。フォーム名には、次のものを使用しました。

<input name="locationList[0].locationName" />

記事が示唆するものの代わりに:

<input name="myFormObject.elements[0].property" />
于 2012-12-10T19:11:17.733 に答える
-1

フォーム要素に同じ名前を使用している場合は、括弧を使用する必要があると思います。

<c:forEach items="${expenseForm.expenseDetails}" varStatus="i">
  <tr id="expenseDetail_${i.index}" class="lineItemsClass" lineNum="${i.index}">
    <td><form:input path="expenseDetails[${i.index}].description" cssStyle="width: 200px;" /> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].description" /></label></td>
    <td><form:input path="expenseDetails[${i.index}].quantity" cssStyle="width: 60px;" readonly="true"/> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].quantity" /></label></td>
    <td><form:input path="expenseDetails[${i.index}].unitPrice" cssStyle="width: 60px;" readonly="true"/> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].unitPrice" /></label></td>
    <td><form:input path="expenseDetails[${i.index}].total" cssStyle="width: 60px;" /> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].total" /></label></td>
  </tr>
</c:forEach>

ここで、expenseDetails は modelAttribute クラスのリストです。パス名は html フォーム名として使用され、インデックス ベースになります。上記のコード セグメントは、私にとっては問題なく機能しています。

于 2012-12-08T17:12:09.510 に答える