1

Spring 3.1を使用しています。

JSP 内の Spring Form にオブジェクトの ArrayList を表示しようとしています。最終的には、ユーザーが行を選択し、バックエンド アクションのボタンを押すことができるように、オブジェクトごとにチェックボックスを用意する必要があります。しかし、Spring フォームを使用して表示するデータを取得できません。私は例外を受け取り続けます:

org.springframework.beans.NotReadablePropertyException: Bean クラス [java.util.ArrayList] の無効なプロパティ 'datafeed[0]': Bean プロパティ 'datafeeds[0]' が読み取れないか、無効な getter メソッドがあります: .... "

縮小されたコードは次のとおりです。

<form:form method="post" commandName="datafeeds">
  <table>
     <thead>
        <tr>
           <th>Name</th>
           <th>State</th>
        </tr>
     <tbody>
        <c:forEach items="${datafeeds}" var="datafeed" varStatus="vs">
           <tr>
              <td><form:label path="datafeeds[${vs.index}].name/></td>
              <td><form:label path="datafeeds[${vs.index}].state/></td>
           </tr>
        </c:forEach>
     </tbody>
  </table>
</form>

次に、コントローラー:

@Controller
public class DataFeedController
{
   @Autowired
   SomeService service;

   @RequestMapping(value="/datafeed")
   public String showDataFeed(Model m) {
      List<DataFeed> datafeeds = service.list();
      m.addAttribute("datafeeds", datafeeds);
      return "datafeed";
   }
}

具体的には、私の質問は、commandName、forEach ループ内の変数、およびコントローラーからのデータがすべてどのように連携するのかということだと思います。上記のコードを使用して誰かに見せてもらえますか?

4

2 に答える 2

3

datafeedsですArrayListdatafeeds.get(index)ではなく で要素にアクセスします[index]。角括弧の使用は、配列に対してのみ機能します。次のようにします。

<c:forEach items="${datafeeds}" var="datafeed" varStatus="vs">
   <tr>
      <td><form:label path="${datafeed.name}"/></td>
      <td><form:label path="${datafeed.state}"/></td>
   </tr>
</c:forEach>
于 2012-10-15T12:00:31.283 に答える
0

このチュートリアルを使用して機能させることができました。基本的に、データフィードのリストを含むフォーム クラスを作成する必要があります。

public class DataFeedForm {
    private List<DataFeed> dataFeeds;

    public List<DataFeed> getDataFeeds() {
        return dataFeeds;
    }

    public void setDataFeeds(List<DataFeed> dataFeeds) {
        this.dataFeeds = dataFeeds;
    }
}

そして、このフォーム オブジェクト (データフィードで満たされた) をビューに渡します。

@Controller
public class DataFeedController
{
   @Autowired
   SomeService service;

   @RequestMapping(value="/datafeed")
   public String showDataFeed(Model m) {
      List<DataFeed> datafeeds = service.list();
      DataFeedForm form = new DataFeedForm();
      form.setDataFeeds(datafeeds);
      m.addAttribute("datafeedsForm", form);
      return "datafeed";
   }
}

そして、フォームのデータを次のようにビューに表示します。

<form:form method="post" modelAttribute="datafeedsForm" commandName="datafeeds">
  <table>
     <thead>
        <tr>
           <th>Name</th>
           <th>State</th>
        </tr>
     <tbody>
        <c:forEach items="${datafeedsForm.datafeeds}" var="datafeed" varStatus="vs">
           <tr>
              <td><form:label path="datafeeds[${vs.index}].name"/></td>
              <td><form:label path="datafeeds[${vs.index}].state"/></td>
           </tr>
        </c:forEach>
     </tbody>
  </table>
</form>
于 2015-05-02T11:45:46.970 に答える