リスト内に複数のオブジェクトがあり、そのリスト内のすべてのオブジェクトのフォームを作成したい(ユーザーは一度に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:フィールドははるかに良いだろう...
私はth:オブジェクトに別のオブジェクトを渡すことができましたが、次にth:fieldは使用できません。私はth:valueとth:nameを使う必要がありますが、これはうまくいくかもしれません。私はthymeleafにフォームの「ターゲットオブジェクト」の名前を伝える方法を探していました –