コレクションに新しいアイテムを追加する
list
の代わりに型変換とを使用するset
と、これはリストに新しいアイテムを追加するために機能します。
<s:textfield name="locations[%{locations.size()}].locationName"/>
セットを使用したい場合は、時間をかけて掘り下げずに目的を達成する方法がわかりませんが、ここから始めてください。
既存のコレクションアイテムを表示および編集する
一方、既存のコレクションを表示および編集できるようにする場合は、 :のlist
代わりにを使用するとこれが機能するはずです。collection
<s:iterator var="listItem" value="yourList" status="listStatus">
<s:set name="paramName">yourList[${ listStatus.index }].someField</s:set>
<s:textfield name="%{#paramName}" value="%{#listItem.someField}"/>
</s:iterator>
ここで、モデルには。というリストがありますyourList
。yourListの項目には、。というフィールドが含まれていますsomeField
。リクエストパラメータ名をフォームに設定することでフィールドに値を設定できます。これにより、yourList[2].someField
これOGNL
が評価され、パラメータ値がyourListのアイテム2のsomeFieldフィールドに設定されます。
上に示したようにクラスを使用しますが、場所をリストに変更すると、次のようになります。
<s:iterator var="location" value="listOfLocations" status="locationStatus">
<s:set name="paramName">listOfLocations[${ locationStatus.index }]</s:set>
<s:hidden name="%{#paramName}.locationId" value="%{#location.locationId}"/>
<s:textfield name="%{#paramName}.locationName" value="%{#location.locationName}"/>
<s:textfield name="%{#paramName}.nearestHospital" value="%{#location.nearestHospital}"/>
</s:iterator>
または、を使用している場合JSTL
、これは同じことを行います。
<c:forEach var="location" items="${ listOfLocations }" varStatus="locationStatus">
<s:set name="paramName">listOfLocations[${ locationStatus.index }]</s:set>
<s:hidden name="%{#paramName}.locationId" value="%{#location.locationId}"/>
<s:textfield name="%{#paramName}.locationName" value="%{#location.locationName}"/>
<s:textfield name="%{#paramName}.nearestHospital" value="%{#location.nearestHospital}"/>
</c:forEach>