1

私はこの豆のクラスを持っています

  Class Address {
    private String addressId;
    private Set<Location> setOfLocations;

    // more attributes


   //getters and setters

 }

 Class Location{
     private Long   locationId;
     private String locationName
     private String nearestHospital;

     //getters and setters
 }

jsp には、Address クラス メンバー用の textField コントロールと、locationName およびnearestHospital 用の Location クラス メンバー用のコントロールがあります。

モデル駆動型インターフェイスがそれらをそれぞれのフィールドにマップするため、Address クラスのメンバーは正常にマップされます。問題は、場所の textFields を Address クラスの Set メンバー内の場所オブジェクトにマップする方法です

4

1 に答える 1

0

コレクションに新しいアイテムを追加する

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>
于 2012-07-23T01:57:06.287 に答える