我们需要使用以下 jsp 标签来将您的实体数据绑定到 jsp 表单字段:
表单来自spring标签库:
以下不是完整的html,但我希望你能自我介绍:
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<form:form action="save" method="post" modelAttribute="patient">
<table>
<tr>
<td>Name</td>
<td>
<form:input path="patient.patient_name" /> <br />
</td>
</tr>
<tr>
<td>Phone</td>
<td>
<form:input path="patient.phone_number" /> <br />
</td>
</tr>
<tr>
<td colspan="2"><button type="submit">Submit</button></td>
</tr>
</table>
</form:form>
表单必须被处理两次,一次是在渲染表单之前,在此期间我们需要为属性值modelAttribute="patient"提供适当的bean实例化。
- 为此,控制器类(在类定义级别)您需要有
@RequestMapping 注释。
- 你需要有handler方法参数如下
@GetMapping("logincreate")
public String handleLoginCreate(@ModelAttribute("login") Login login, Model model)
{
System.out.println(" Inside handleLoginCreate ");
model.addAttribute("login",login);
return "logincreate";
}
Spring 将扫描所有处理程序方法@ModelAttribute 并使用 Login 类的默认构造函数对其进行实例化,并调用其所有 getter 和 setter(用于从表单到“登录”的 jsp 绑定)。如果缺少以下任何一项,jsp都不会显示,会抛出各种异常
- getter/setter
- 默认构造函数
- model.addAttribute("login",login);
- 类级别@RequestMapping
- 方法参数级别@ModelAttribute
另外,jsp中action的handler方法,如上式action="save",handler方法也可能是这样的:
@PostMapping("save")
public String saveLoginDetails(@ModelAttribute("login") Login login, Model model) {
//write codee to insert record into DB
System.out.println(" Inside save login details ");
System.out.println("The login object is " + login.toString());
System.out.println("The model object contains the login attribute"+ model.getAttribute("login"));
loginService.saveLogin(login);
return "welcome";
}
重要的学习是:
- 在启动表单之前,spring应该有适当的注解来指示表单的backing bean,在上面的例子中,“backing bean”或“binding object”是Login login,带有适当的handler方法的参数注解
@ModelAttribute("login") Login login