Java SpringMVC表单处理和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

我已经学习Spring一周左右了,但我觉得我在表单处理方面遗漏了一些东西

例如,如果我有一个允许输入
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)完全解耦的方法

但你也有其他选择:

  • 使用
    @RequestParameter(“firstname”)
    等注释参数直接获取请求参数,并在模型对象中手动使用它们:您可以手动执行Spring免费提供的操作,但可以获得完全控制权
  • 使用自定义数据绑定器。它可以工作,但将击败SpringMVC数据绑定和验证中的几乎所有功能,所以我强烈建议您不要这样做

在Java世界中,事情通常是这样做的吗?它可能会工作,但似乎有点“不那么干净”,嗯,啊!这正是我需要的术语,形式支持对象。我在网上找不到这个,因为我不太确定要搜索什么。
<form:input path="age" />
<form:input path="firstname" />
<form:input path="lastname" />