Java formbackingobject和referencedata对象在SpringWebMVC周期中是如何运行的?

Java formbackingobject和referencedata对象在SpringWebMVC周期中是如何运行的?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我是Spring框架的新手,试图理解它的功能并将其与方法进行比较,当我试图从Spring MVC的角度将它们与HTTP请求周期联系起来时,这两个对象让我感到困惑 如果有人能举例说明这两个对象,我将不胜感激 Q:formbacking对象和参考数据对象之间有什么区别?API来了 从给定请求中检索当前表单的备份对象 一些场景 在遍历嵌套路径时避免NullPointerException 请注意,上面的nestedPath字段尚未初始化。因此,如果您尝试在表单上检索它的值,例如 <spri

我是Spring框架的新手,试图理解它的功能并将其与方法进行比较,当我试图从Spring MVC的角度将它们与HTTP请求周期联系起来时,这两个对象让我感到困惑

如果有人能举例说明这两个对象,我将不胜感激

Q:formbacking对象和
参考数据
对象之间有什么区别?

API来了

从给定请求中检索当前表单的备份对象

一些场景

  • 在遍历嵌套路径时避免NullPointerException

请注意,上面的nestedPath字段尚未初始化。因此,如果您尝试在表单上检索它的值,例如

<spring:form path="nestedPath.someProperty"/> 
  • 查找以更新场景
您可以提交某个命令的标识符(通常使用GET方法)以允许用户稍后更新它

public Object formBackingObject(HttpServletRequest request) throws Exception {
     if(request.getMethod().equalsIgnoreCase("GET")) {
         return commandRepository.findById(Integer.valueOf(request.getParameter("id")));
     }
 }
及空气污染指数

为给定请求创建参考数据映射

您可以使用referenceData创建表单使用的数据,例如类别列表

protected Map referenceData(HttpServletRequest request) throws Exception {
    return new ModelMap().addAttribute(categoryRepository.findAll()); 
}
在表格上

<label>Select category</label>
<form:select path="category">
    <form:option label="Select category" value=""/>
    <form:options items="${categoryList}"
                  itemLabel="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_LABEL" 
                  itemValue="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_VALUE"/>
</form:select>
选择类别

加载网页时,您需要将数据传递给它,以便它能够呈现

其中一些数据将是纯信息性的只读数据;页面呈现所需的数据,但该数据不是当前事务的一部分。示例:要填充下拉列表的国家列表,用户可以购买的可能产品列表

其他数据将用于读写:比如,表单的内容必须用当前数据填充,但也可以由用户更新。这组数据将绑定到表单;发送到页面的数据将呈现,从页面(由用户)发送的数据将导致更新。示例:用户的姓名和地址;当前订单

所有这些数据通常存储在页面需要访问的一个或多个对象中

包含信息数据的对象应放置在
referenceData()
方法提供的映射中。可以有任意多个这样的对象

要绑定到表单的数据(读/写数据)必须包含在单个对象中。此对象应通过
formBackingObject()
方法返回


我要补充的是,在Spring的最新版本中,使用注释代替这些“内置”方法。

加载网页时,您将希望向其传递数据,以便它能够呈现

其中一些数据将是纯信息性的,只读;页面呈现所需的数据,但该数据不是当前事务的一部分示例:要填充下拉列表的国家列表,用户可以购买的可能产品列表

其他数据将用于读写:例如,表单的内容必须用当前数据填充,但也可以由用户更新。这组数据将绑定到表单;发送到页面的数据将呈现,从页面(由用户)发送的数据将导致更新。示例:用户的姓名和地址;当前订单

所有这些数据通常存储在页面需要访问的一个或多个对象中

包含信息数据的对象应放置在referenceData()方法提供的映射中。此类对象可以任意多


要绑定到表单的数据(读/写数据)必须包含在单个对象中。此对象应由formBackingObject()返回方法。

你能用更简单的语言解释表单支持对象和引用数据吗……假设你必须向刚进入Spring世界的人解释它,或者说对Spring一无所知的人解释它?@Rachel我真的建议你在之前遵循Spring MVC教程。仔细阅读。每章一天=六个工作日或免费。祝你好运!我看了你的网站。你没有解释为什么要添加id和action属性如果这是一个API,我该如何使用它?我不能在任何类中都使用这些方法。这是我一直在寻找的东西…感谢Jacob的简单解释。我们可以通过
请求.setAttribute(字符串名称,对象值)
方法发送信息数据吗?。然后使用expresion求值语法在视图中检索它,如
${name}
?更合适的是,将其发送到参考数据映射或请求?您可以使用
request.setAttribute
,当然可以。但是这将你与HTTPRequest对象紧密地联系在一起,所以我喜欢referenceData的想法,或者在
ModelAndView
对象上使用
addAttribute
(这最终相当于
request.setAttribute
但是是一个更好的抽象)。。但是我在
ModelAndView
类中找不到
addAttribute
方法。相反,我看到了这个:。是这样吗?这似乎是
addObject
方法正确的一个…没问题,我刚刚在我的环境中测试了它,并按预期工作。再次感谢。我认为应该使用referencedata方法填充表单数据,在我的例子中是一个简单的下拉列表。表单使用表单支持对象填充未预先确定的数据。从Spring3.0开始,支持带注释的控制器
protected Map referenceData(HttpServletRequest request) throws Exception {
    return new ModelMap().addAttribute(categoryRepository.findAll()); 
}
<label>Select category</label>
<form:select path="category">
    <form:option label="Select category" value=""/>
    <form:options items="${categoryList}"
                  itemLabel="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_LABEL" 
                  itemValue="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_VALUE"/>
</form:select>