2017-11-17 12 views
0

リスト内に複数のオブジェクトがあり、そのリスト内のすべてのオブジェクトのフォームを作成したい(ユーザーは一度に1つのオブジェクトのみを送信できます) 。しかし、すぐに名前と値の代わりにフィールドを使用すると例外が発生します。たぶん誰かが私を助けることができます。これは、th:eachを使用する場合にのみ発生します。私はそれが動作するフォームに単一のオブジェクトを渡す場合は、そのより読みやすいので...私は最小限に問題を軽減:)リスト内の各オブジェクトのThymeleafフォームは「BindingResultもプレーンなターゲットオブジェクトもありません」

例外:

java.lang.IllegalStateException:BindingResultもプレーンなターゲットオブジェクトどちらを

@Controller 
public class TestController { 

    @GetMapping("/objectlisttest") 
    public ModelAndView getObjectListTest() { 
     ModelAndView mv = new ModelAndView("objectlisttest"); 
     List<DataObject> objects = new ArrayList<>(); 
     for (int i = 0; i < 5; i++) { 
      DataObject o = new DataObject(); 
      o.setText("Dataobject"); 
      objects.add(o); 
     } 
     mv.addObject("objects", objects); 
     return mv; 
    } 

    @PostMapping("/objectlisttest") 
    public ModelAndView editObjectListTest(DataObject o, BindingResult br) { 
     System.out.println(o); 
     return getObjectListTest(); 
    } 

    public static class DataObject { 
     private String text; 

     public String getText() { 
      return text; 
     } 

     public void setText(String text) { 
      this.text = text; 
     } 
    } 

} 

ビュー:

<div th:each="o : ${objects}"> 
    <form th:object="${o}" th:action="@{/objectlisttest}" method="POST"> 
     <label>Text<input type="text" th:field="*{text}"></label> 
     <input type="submit"> 
    </form> 
</div> 
要求属性として利用できる

Controllerクラス 'O' Bean名用

事前に感謝

EDIT: は

<div th:each="o : ${objects}"> 
    <form th:object="${o}" th:action="@{/objectlisttest}" method="POST"> 
     <label>Text<input type="text" th:value="*{text}" th:name="text"></label> 
     <input type="submit"> 
    </form> 
</div> 

作品への表示を変更します。しかしth:フィールドははるかに良いだろう...

答えて

0

モデルに "o"オブジェクトがあることが予想されます。

mv.addObject("o", someObject); 

エラーが表示されなくなりましたが、モデルの "o"とループ変数として "o"の間に競合があると思われます。

モデルに同じ参照を付けて複数のフォームを追加することは好ましくありません(すべてのフォームにth:object="${o}"があります)。

ロジックを再設計する必要があります。各オブジェクトをモデルに個別に配置するか、リストを保持するフォームを1つだけ作成します。

+0

私はth:オブジェクトに別のオブジェクトを渡すことができましたが、次にth:fieldは使用できません。私はth:valueとth:nameを使う必要がありますが、これはうまくいくかもしれません。私はthymeleafにフォームの「ターゲットオブジェクト」の名前を伝える方法を探していました –

関連する問題

 関連する問題