列表中每个对象的Thymeleaf形式导致" BindingResult和普通目标对象"

时间:2017-11-17 09:09:56

标签: java spring thymeleaf

我在列表中有多个对象,并希望为该List中的每个对象创建一个表单(用户只能一次提交一个对象)。但是一旦我使用th:field而不是name和value,我就会得到一个例外。也许有人可以帮助我。它只发生在使用th:each;如果我将一个对象传递给它工作的表单...我将问题减少到最小,以便它更具可读性:)

例外:

java.lang.IllegalStateException:BindingResult和bean名称的普通目标对象' o'可用作请求属性

控制器类:

@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>

提前致谢

编辑: 将视图更改为

<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>

的工作原理。但是:场地会更好......

1 个答案:

答案 0 :(得分:0)

它希望模型中有“o”对象。如果你打电话

mv.addObject("o", someObject);

错误消失我认为但是模型中的“o”和循环变量中的“o”之间会发生冲突。

我想说使用相同的模型引用添加多个表单并不是一个好主意(所有表单都有th:object="${o}")。

你应该重新设计逻辑。将每个对象分别放在模型中,或者只创建一个表单以保持列表。