SpringMVC——常用注解说明

ModelAttribute

  • 作用:用在方法上,表示当前方法会在控制器的方法执行之前执行;用在参数上获取指定的数据给参数赋值。
  • 常用属性
属性 功能
value 用于获取数据的key
  • 应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

示例代码

基于POJO属性的基本使用

编写jsp代码

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--ModelAttribute注解的基本使用-->
        <a href="springmvc/testModelAttribute?username=test">测试ModelAttribute</a>
    </body>
</html>

编写Controller代码

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println("执行了testModelAttribute方法...  " + user.getUsername());
        return "success";
    }

    /**
     * 被ModelAttribute修饰的方法
     * @param user
     */
    @ModelAttribute
    public void showModel(User user)
    {
        System.out.println("执行了showModel方法... "+user.getUsername());
    }

}
ModelAttribute修饰方法带返回值

编写jsp代码

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--修改用户信息 —— 要求用户的密码不能修改-->
        <form action="springmvc/updateUser" method="post">
            用户名称:<input type="text" name="username"/><br/>
            用户年龄:<input type="text" name="age"/><br/>
            <input type="submit" value="保存"/>
        </form>
    </body>
</html>

编写实体类

package com.liang.domain;

import java.io.Serializable;

public class User implements Serializable {

    private String username;
    private String password;
    private Integer age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

编写Controller代码

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/updateUser")
    public String updateUser(User user)
    {
        System.out.println("updateUser方法执行了... "+user);
        return "success";
    }

    @ModelAttribute
    public User showModel(String username){
        //模拟去数据库查询
        User user = findUserByName(username);
        System.out.println("执行了showModel方法... "+ user);
        return user;
    }

    /**
     * 模拟去数据库查询
     * @param username
     * @return
     */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(18);
        user.setPassword("123456");

        return user;
    }

}
ModelAttribute修饰方法不带返回值

编写jsp代码

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--修改用户信息 —— 要求用户的密码不能修改-->
        <form action="springmvc/updateUser" method="post">
            用户名称:<input type="text" name="username"/><br/>
            用户年龄:<input type="text" name="age"/><br/>
            <input type="submit" value="保存"/>
        </form>
    </body>
</html>

编写Controller代码

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/updateUser")
    public String updateUser(@ModelAttribute("user1") User user)
    {
        System.out.println("updateUser方法执行了... "+user);
        return "success";
    }

    @ModelAttribute
    public void showModel(String username, Map<String,User> userMap){
        //模拟去数据库查询
        User user = findUserByName(username);
        System.out.println("执行了showModel方法... "+ user);
        userMap.put("user1",user);
    }

    /**
     * 模拟去数据库查询
     * @param username
     * @return
     */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(18);
        user.setPassword("123456");

        return user;
    }
}

SessionAttribute

  • 作用:用于多次执行控制器方法间的参数共享,即将指定的Model中的键值对添加到session中。
  • 常用属性
属性 功能
value 用于指定存入的属性名称
type 用于指定存入的数据类型

示例代码

编写jsp代码

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--SessionAttribute注解的使用-->
        <a href="springmvc/testPut">存入SessionAttribute</a><br/><br/>
        <a href="springmvc/testGet">获取SessionAttribute</a><br/><br/>
        <a href="springmvc/testClean">清除SessionAttribute</a><br/><br/>
    </body>
</html>

编写Controller代码

package com.liang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;

import java.util.Map;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
@SessionAttributes(value = {"username","password","age"})
public class AnnotationController {

    @RequestMapping(path = "/testPut")
    public String testPut(Model model)
    {
        model.addAttribute("username","张三");
        model.addAttribute("password","123456");
        model.addAttribute("age",24);
        return "success";
    }

    @RequestMapping(path = "/testGet")
    public String testGet(Model model, ModelMap modelMap)
    {
        System.out.println(model.getAttribute("username")+" : "+model.getAttribute("password")+" : "+model.getAttribute("age"));
        System.out.println("-------------------");
        System.out.println(modelMap.get("username")+" : "+ modelMap.get("password")+" : "+modelMap.get("age"));
        return "success";
    }

    @RequestMapping(path = "/testClean")
    public String testClean(SessionStatus sessionStatus){
        sessionStatus.setComplete();
        return "success";
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章