当前位置: 首页 > 知识库问答 >
问题:

列表中每个对象的Thymeleaf形式导致“BindingResult和普通目标对象都不是”

傅阳
2023-03-14

我在一个列表中有多个对象,希望为该列表中的每个对象创建一个表单(用户一次只能提交一个对象)。但只要我使用th:field而不是name和value,我就会得到一个异常。也许有人能帮我。它仅在使用th:each时发生;如果我将单个对象传递给它工作的窗体。。。我将问题降到了最低程度,因此更具可读性:)

例外情况:

java.lang.IllegalStateExcture: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>

作品。但是th:场地会好得多...

共有1个答案

孔逸春
2023-03-14

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

mv.addObject("o", someObject);

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

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

你应该重新设计逻辑。可以将每个对象分别放置在模型中,也可以仅创建一个表单以保留列表。

 类似资料:
  • 问题内容: 是的,我阅读这是很常见的问题,但是阅读这些帖子并没有真正帮助我。 在 简短的故事 是,我想提交一份关于showAllComments.jsp形式 这是控制器: 结果是: java.lang.IllegalStateException:BeanResult’command’的BindingResult和普通目标对象都不能用作请求属性 但可能您需要从头开始了解 整个故事 :用户通过单击以下

  • 问题内容: 是的,我阅读这是很常见的问题,但是阅读这些帖子并没有真正帮助我。 在 简短的故事 是,我想提交一份关于showAllComments.jsp形式 这是控制器: 结果是: java.lang.IllegalStateException:BeanResult’command’的BindingResult和普通目标对象都不能用作请求属性 但可能您需要从头开始了解 整个故事 :用户通过单击以下

  • 问题内容: 我在网上查看了几乎所有与该问题有关的答案,但在我的代码中找不到该问题。 这是我的JSP页面。 当我删除 工作正常。我可以与控制器通信。因此问题与这条线有关。 这是我的web.xml 这是我的servlet-context.xml 还有我的applicationContext.xml 我可能在XML文件中做错了。我对于这个spring是新来的-hibernate员工,请耐心等待。谢谢..

  • 当我只留下表显示可用的比萨饼与链接“删除”,一切显示正常,删除也正常工作。 我想表单和控制器@modelAttribute有问题,但我找不到确切的问题,我在controller中添加了与表单相同的属性--“mypiza”,这应该可以工作(至少从我在Google上找到的东西来看)。 有人能告诉我们是什么阻碍了这个应用程序的工作,以及如何解决这个问题吗?如果需要其他配置文件,我可以提供它们。

  • 问题内容: 我正在尝试编写一个Spring MVC Web应用程序,用户可以在其中将电影名称添加到内存集合中。像这样配置 和 套餐中只有一个@Controller班级com.example 该应用程序配置了上下文路径/Example。当我发送GET请求到 http://localhost:8080/Example/movies 请求失败,Spring MVC响应500状态码,并报告以下异常和堆栈跟

  • 问题内容: 我有这个控制器代码,它抛出上述错误。到昨天为止,一切正常,我不知道同事对该代码做了什么,今天我看到了错误: Bean名称“ sideForm”的BindingResult或普通目标对象都不能用作请求属性 你能建议我在哪里寻找这种错误。我在POST或GET方法声明中犯了任何错误还是返回了错误的东西? 非常感谢你的帮助:) 此页面从如下所示的表单获取值: 问题答案: 确保你的Spring表