10

コマンド オブジェクトがあり、プロパティ内FaxFormのオブジェクトのリストを保持しています。 FaxStatusfaxStatusList

public class FaxForm {
  private List<FaxStatus> faxStatusList;
  public void setFaxStatusList(List<FaxStatus> faxStatusList) {
    this.faxStatusList = faxStatusList;
  }
  public List<FaxStatus> getFaxStatusList() {
    return faxStatusList;
  }
}

最初に、以下を実行してオブジェクトをバインドする JSP ページを作成しました。

<c:forEach items="${esaFaxForm.faxStatusList}" var="item" varStatus="loop">
  <tr class="tableAltBackground">
    <td>
      <form:checkbox path="faxStatusList[${loop.index}].selected"/>
    </td>
    <td>
      <form:select path="faxStatusList[${loop.index}].status" items="${esaFaxForm.statusOptions}" onchange="checkThisBox(this);"/>
    </td>
    <td>
      <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.name}</a>
      <form:hidden path="faxStatusList[${loop.index}].name"/>
    </td>
    <td>
      <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.id}</a>
      <form:hidden path="faxStatusList[${loop.index}].id"/>
    </td>
  </tr>
</c:forEach>

ただし、forEach ループとインデックスを使用せずにバインディングを行う方法を見つけようとしています。Spring Web サイトの例は、パスをリスト名に設定することによるバインディングを示しています。プロパティをバインドする方法はありますか? 私はこれを試しましたが、失敗します:

<form:checkbox path="faxStatusList.faxStatus.selected"/>
<form:select path="faxStatusList.faxStatus.status" items="${esaFaxForm.statusOptions}"/>

faxStatusList には getter メソッドと setter メソッドがあり、FaxStatus 変数にはそれぞれ getter/setter プロパティがあります。「Bean クラスのプロパティ 'faxStatusList.faxStatus' が無効です...」というエラーが表示されます。

4

1 に答える 1

9

Springフォームタグにはチェックボックスタグがあります。次のように使用して、バインドを自動的に行うことができます。

<form:checkboxes items="${faxStatusList}" path="faxStatusList" itemLabel="name" itemValue="id" delimiter="<br/>" onclick="yourOnClickMethodIfYouNeed(this);"/>

上記のスニペットは、br タグで区切られたチェックボックス項目のリストを表示します。チェックボックスの状態を変更すると、FaxForm に適切に反映されます。faxStatusList オブジェクト。

于 2009-12-21T18:42:40.743 に答える