Java SpringMVC表单处理和Spring标记
我已经学习Spring一周左右了,但我觉得我在表单处理方面遗漏了一些东西 例如,如果我有一个允许输入Java SpringMVC表单处理和Spring标记,java,spring,forms,spring-mvc,Java,Spring,Forms,Spring Mvc,我已经学习Spring一周左右了,但我觉得我在表单处理方面遗漏了一些东西 例如,如果我有一个允许输入Student数据的表单,我有一个Studentbean,定义如下: public class Student { private Integer age; private String name; private Integer id; // and other getters and setters } 然后我有一个表格: <form:input path="n
Student
数据的表单,我有一个Student
bean,定义如下:
public class Student {
private Integer age;
private String name;
private Integer id;
// and other getters and setters
}
然后我有一个表格:
<form:input path="name" />
<form:input path="age" />
<form:input path="id" />
如果我想创建一个自定义表单,该表单不直接添加包含Student
具有的每个属性的所有字段的“Student”,而是一个包含一些复杂字段的自定义表单,这些字段与我们在模型中定义的Student
完全不同。例如:
<form:input path="age" />
<form:input path="firstname" />
<form:input path="lastname" />
请注意,firstname
和lastname
属性在Student
类定义中都不存在。我可以将这两个值连接起来并将其放入name
中
对于这种情况,我是否必须创建一个新的bean类来定义该表单的属性?这对我来说似乎有点多余
那么,ViewModel是一个解决方案吗 在这种情况下,您可以仅使用所需字段形成JSON对象,并将其作为请求主体发送给控制器 在客户端- 单击save按钮,框定json并作为post请求发送 在服务器端使用-
@RequestMapping(value=“/add”,method=RequestMethod.POST)
公共字符串add(@RequestBody Student){}
创建一个“表单支持对象”,即特定于表单的类。将值从此FBO复制到实体类
如果表单与db实体不同,则它不是多余的
如果有很多场地,使用推土机之类的工具将其自动化
不过,在数据库中存储年龄和全名是个坏主意。存储出生日期和名字/姓氏更好 您可以要求Spring自动将请求参数绑定到模型属性的字段,也可以手动执行所有操作。经典的方法是使用一个表单bean,该表单bean具有与HTML表单相同的字段,并让Spring填充它,然后从该表单bean构建对象。除非您有充分的理由,否则我的建议是选择将视图部分(表单+表单bean)与模型部分(您的模型bean)完全解耦的方法 但你也有其他选择:
- 使用
等注释参数直接获取请求参数,并在模型对象中手动使用它们:您可以手动执行Spring免费提供的操作,但可以获得完全控制权@RequestParameter(“firstname”)
- 使用自定义数据绑定器。它可以工作,但将击败SpringMVC数据绑定和验证中的几乎所有功能,所以我强烈建议您不要这样做
<form:input path="age" />
<form:input path="firstname" />
<form:input path="lastname" />