使用@ModelAttribute和表单标签库将表单提交的值绑定到类中

使用@ModelAttribute和表单标签库将表单提交的值直接绑定到类中

场景:使用spring框架时,在控制类方法中可以使用@ModelAttribute标记自定义类参数,spring会自动将表单提的值绑定到标记的类中同名属性中。

作用:用于转化表单数据类型,同时便于将表单值传递到类中,在复杂的提交中很有用。

下面例子将讲述怎么使用:
控制类:

@RequestMapping(value="/login")
public String login(@ModelAttribute("login") Login login) {
    return "loginform";
}

注:@ModelAttribute(“login”)中"login"可以不用写。

Login类:

public class Login {
private String userName;
private int password;

public void setUserName(String userName){
    this.userName=userName;
}
public void setPassword(String password2){
    //转String类型为int
    this.password=Integer.parseInt(password2);
}

注:login类必须有set方法,spring框架会调用这个方法为类属性赋值;方法名必须是set+属性名,不区分大小写;方法中形参类型必须是String(或一些固定类,不在本文所讲范围),因为表单提交的值都是以字符串类型提交的,形参名不一定要与属性名相同。

提交表单的视图jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


    Title


    //form标签中modelAttribute属性值必须是Login类的类名,不区分大小写
    
  //表单提交项中,path属性值必须是Login类中对应的属性名(不是set方法中的形参名),区分大小写
         用户名:
         密码: 
         
     


注:提交的表单必须使用form: 标签,要使用这个标签,需要在上添加<%@ taglib prefix=“form” uri=“http://www.springframework.org/tags/form” %>;表单提交类型是post还是get不限。

还应注意的是,第一次执行@ModelAttribute Login login时就会创建一个Login类对象,之后加载视图jsp会自动将Login类中属性值加载到视图jsp的表单中(注:如果不先创建一个Login对象,加载表单时会报错),比如,在本实例中,加载视图jsp的控制方法就是第一个类中的唯一个方法,如果Login类写private String userName = “me”; 第一次加载表单,表单用户名一项就会显示me 初始值,当提交表单时实际上是更改之前创建的Login对象属性值,如果再次加载视图jsp,表单每项默认显示值会是更改后的Login对象属性值,利用这个,我们可以设置用户登录失败后,返回登录界面,之前输入的值不会消失(但form:password始终默认为空),我们经常见到的比较成熟的网站是不是都是这样的?

你可能感兴趣的:(方法使用)