Spring MVC教程五

本节介绍SpringMVC中@SessionAttributes和@ModelAttribute注解的使用。使用@SessionAttributes注解可将模型中对应属性暂存于HttpSession,实现多请求间数据共用;被@ModelAttribute注释的方法会在controller每个方法执行前执行。还给出了相关代码示例及github地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好的!本节我们介绍SpringMVC使用@SessionAttributes和@ModelAttribute 注解

SpringMVC使用@SessionAttributes注解

若希望在多个请求之间共用某个模型属性数据,则可以在控制器上标注@SessionAtrributes,SpringMVC将在模型中对映属性暂存在HttpSession中。

在前面的user类中创建user的构造器:

public User(String username, String password, String email, int age) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
    }

controller:

@RequestMapping("/testSessionAttributes")
public String testSessionAtrributes(Map<String,Object> map){
    User user = new User("tom","1222","chuanlei@qq.com",15);
    map.put("user",user);
    map.put("school","yizhong");
    return "success";
   }

在controller类的头部加入@SessionAttributes注解,value = “user”,对应map中的key,也可以使用type对应,如此例中的type = String.class,可对应school这个String类型数据。
在这里插入图片描述
html:

<a href="/springmvc/testSessionAttributes">test SessionAttributes</a>

success.html:

<html>
<body>

    success
    <br><br>
    time:${requestScope.time}
    <br><br>
    names:${requestScope.names}
    <br><br>
    School:${sessionScope.school}
    <br><br>
    user:${requestScope.user}
    <br><br>
    user:${sessionScope.user}
</body>
</html>

结果:
在这里插入图片描述

SpringMVC使用@ModelAttribute注解

被@ModelAttribute注释的方法会在此controller每个方法执行前被执行
为User对象添加id

package com.xcl.entities;

/**
 * @author chuanlei.xu
 * @version 1.0
 * @date 2019/2/27 15:06
 */
public class User {

    private Integer id;
    private String username;
    private String password;
    private String email;
    private int age;
    private Address address;
    
    public User(String username, String password, String email, int age) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
    }
    public User(){

    }
    public User(Integer id, String username, String password, String email, int age) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = 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 String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

controller:

//被@ModelAttribute注释的方法会在此controller每个方法执行前被执行
    @ModelAttribute
    public void getUser(@RequestParam(value = "id",required = false) Integer id,Map<String,Object> map){
        if(id != null){
            User user = new User(1,"Tom","123456","Tom@qq.com",12);
            //System.out.println("模拟从数据库中取一个对象"+user);
            map.put("user",user);
        }

    }
	/**
     *运行流程:
     * 1.执行@ModelAttribute 注解修饰的方法:从数据库中取出对象,把对象放入到map中,键为user
     * 2.SpringMVC从map中取出User对象,并把表单中的请求参数赋给该User对象 的对应属性
     * 3.SpringMVC 把上述对象传入目标方法的参数
     *
     * 注意:在@ModelAttribute 修饰的方法中放入到map 时的键需要和目标方法入参类型的第一个字母小写的字符串一致!
     */
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("change:"+user);
        return "success";
    }

index.html:

<!--
        模拟修改操作:
        1.原始数据为:1,Tom,123456,tom@qq.com,12
        2.原始密码不能被修改
        3.表单回显,模拟操作直接在表单填写对应的属性值
 -->
    <form action="/springmvc/testModelAttribute" method="post">
        id:<input type="hidden" name="id" value="1">
        username:<input type="text" name="username" value="Tom">
        <br>
        email:<input type="text" name="email" value="tom@qq.com">
        <br>
        age:<input type="text" name="age" value="12">
        <br>
        <input type="submit" value="Submit">
    </form>

结果:
在这里插入图片描述

  • github 地址
    https://github.com/chuanleixu/SpringMVC_Tutorials
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值