原本打算将@ModelAttribute跟@SessionAttributes一起写的发现有些例子不可以重复使用,所以决定再开一篇文章写
顾名思义SessionAttributes就是保存session的,SessionAttributes使用方法很简单,@SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @SessionAttributes({“attr1”,”attr2”})。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class),当然也可以指定多个类,如
@SessionAttributes(types = {User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})。
以下例子使用:@SessionAttribute必须配合@ModelAttribute一起使用,
第一种方式,采用@SessionAttributes(“变量名”)
代码如下
1: @Controller
2: @SessionAttributes("user")
3: public class testSessionAttribute {
4:
5: private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
6:
7: @RequestMapping("test")
8: public String test(ModelMap map){
9: UserBean userBean = new UserBean();
10: userBean.setId(1);
11: userBean.setUsername("EdwardLau");
12: userBean.setPassword("Hello World !");
13: map.put("user", userBean);
14: return "sessionattribute";
15: }
16:
17:
18: @RequestMapping("test1")
19: public String test(@ModelAttribute("user") UserBean userBean){
20: logger.debug("test1 方法调用----------");
21: logger.debug(userBean.getId()+":"+userBean.getPassword()+":"+userBean.getUsername());
22: logger.debug("test1 方法调用结束----------");
23: return "users";
24: }
25:
26: }
在浏览器运行http://localhost:8080/SpringMVC/system/test得到如下图所示:
点击调用test1方法后,看后台如下:
通过注解@ModelAttribute可以获得之前保存的值。
第二种方式,采用@SessionAttributes(types={指定class})
采用这种方式的话系统会默认保存指定class的名字(头字母小写),如UserBean.class,modelmap会仅仅会保存名字为userBean或者userbean的对应的class,其余则不会保存,代码如下:
当在在页面上输入http://localhost:8080/SpringMVC/system/test时候,会把对应的内容保存到modelmap中,但后点击如下图,调用test1方法的时候,
得到如下图结果:
事实证明:调用sessionAttriubte只适用types参数的时候只是,默认保存以类名为名字的值,其中类名第一个字母为小写,而他只是能保存当前对象的值,而对象中存在了那个外一个对象的时候则不能保存
第三种:采用@SessionAttributes(value={指定名称},types={指定class})
使用这种方法则对指定的类,进行特定名称保存,一对一的形式进行保存,代码如下:
1: @Controller
2: @SessionAttributes(value={"test","dept"}, types={UserBean.class,DeptBean.class})
3: public class testSessionAttribute {
4:
5: private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
6:
7: @RequestMapping("test")
8: public String test(ModelMap map){
9: UserBean userBean = new UserBean();
10: userBean.setId(1);
11: userBean.setUsername("EdwardLau");
12: userBean.setPassword("Hello World !");
13: map.put("aaa", "aaa");
14: map.put("test", userBean);
15: UserBean userBean1 = new UserBean();
16: userBean.setId(2);
17: userBean.setUsername("EdwardLau1");
18: userBean.setPassword("Hello World1 !");
19: map.put("user", userBean1);
20: DeptBean deptBean = new DeptBean();
21: deptBean.setDeptId(120);
22: deptBean.setDeptname("综合管理");
23: deptBean.setUserBean(userBean1);
24: map.put("dept", deptBean);
25: return "sessionattribute";
26: }
27:
28:
29: @RequestMapping("test1")
30: public String test(@ModelAttribute("test") UserBean userBean, @ModelAttribute("aaa") String aaa
31: ,@ModelAttribute("user") UserBean bean,@ModelAttribute("dept") DeptBean deptBean){
32: logger.debug("test1 方法调用----------");
33: logger.debug(userBean.getId()+":"+userBean.getPassword()+":"+userBean.getUsername());
34: logger.debug("aaaa:"+aaa+"bean:"+bean.getId()+":"+bean.getUsername()+":"+bean.getPassword());
35: logger.debug("deptBean:"+deptBean.getDeptId()+":"+deptBean.getUserBean().getUsername()+":"+deptBean.getDeptname());
36: logger.debug("test1 方法调用结束----------");
37: return "testsession";
38: }
39:
40: }
同样运行第二种方式的地址,得到的结果如下图:
采用这种方式只是把要保存的类定义到固定的名字而已,用法与第二种一样
分享到:
相关推荐
例如,可以结合`@SessionAttributes`注解来实现会话级别的模型数据共享。这在处理多步表单或者需要跨多个请求维护状态的情况下非常有用。 最后,像在`BaseController`中所示,`@ModelAttribute`还可以用于设置`...
虽然`@ModelAttribute`主要处理请求级的数据,但Spring MVC还提供了`@SessionAttributes`注解,用于将某些模型对象保存在session中,跨多个请求保持状态。`@SessionAttributes`通常用于处理那些在多个请求之间需要...
通过这种方式,`@SessionAttributes`和`@ModelAttribute`协同工作,使得我们能够方便地在多个请求间共享和恢复数据,而无需手动处理Session管理。这对于提高代码的可读性和减少重复代码是很有帮助的。 总的来说,`@...
此外,`@ModelAttribute`还支持预填充对象的方法,即可以在控制器方法中定义一个带有`@ModelAttribute`的方法来预先设置对象的某些属性。 **示例代码:** ```java @RequestMapping("/form") public String form...
通过ModelAndView、Map与Model、@SessionAttributes和@ModelAttribute注解来处理模型数据;其中,@ModelAttribute是重点,说明其运行流程并进行代码分析,最终给出SpringMVC目标方法的POJO类型参数的入参全过程,并...
它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...
5. **@SessionAttributes 和 @ModelAttribute** `@SessionAttributes` 注解用于声明需要在 HTTP 会话中存储的属性,而 `@ModelAttribute` 通常用于从请求参数或会话中创建或更新模型对象。例如: ```java @...
SpringMVC 3.1.1版本的源码中,Controller接口和相关注解(如@RequestMapping、@SessionAttributes、@ModelAttribute)的实现提供了上述功能的基础。通过阅读源码,我们可以更深入地理解这些特性的内部工作原理。 ...
15. `@ModelAttribute("attrName")`:配合`@SessionAttributes`使用,可以从HttpSession中获取或向其中添加属性。 通过深入理解并熟练运用这些注解,开发者可以有效地构建和维护Spring MVC应用程序,提高开发效率和...
在Java Web开发中,Spring框架提供了`@SessionAttributes`和`@ModelAttribute`注解,可以结合自定义拦截器实现防重复提交。 1. **@SessionAttributes**:这个注解用于将模型属性存储在Session中。当我们处理表单...
在这个过程中,SpringMVC提供了多种机制来实现数据回显,包括模型数据导向视图、@ModelAttribute、Map Model和SessionAttributes等。 模型数据导向视图 在SpringMVC中,模型数据是指控制器传递给视图的数据。模型...
本文主要围绕"SSM笔记-处理模型数据"这一主题,深入探讨ModelAndView、ModelAttribute以及SessionAttributes在SpringMVC中的应用。 首先,我们来理解ModelAndView。在SpringMVC中,Controller处理完业务逻辑后,...
- `@ModelAttribute` 通常与表单绑定和模型属性结合使用,它可以从请求参数中获取数据并创建一个对象实例,或者将对象添加到模型中。例如: ```java @PostMapping("/submitForm") public String submitForm(@...
- `@ModelAttribute` 用于将请求参数绑定到一个对象,常用于表单数据的处理。此外,它还可以用于方法参数的预处理,如校验或填充默认值。 8. **@SessionAttributes** - `@SessionAttributes` 注解用于在HTTP会话...
- `@ModelAttribute`和`@SessionAttributes`:在Spring MVC中,`@ModelAttribute`用于将请求参数绑定到模型对象,`@SessionAttributes`则用于在HTTP会话中存储模型对象。 - `@PathVariable`:从URL路径中提取参数...
public String createUser(@ModelAttribute User user) { // ... return "redirect:/users"; } ``` 7. `@ResponseBody`:标记在方法上表示返回值将直接写入 HTTP 响应体,而不是试图寻找一个对应的视图进行渲染。...
访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 视图解析...
访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 ...
- `@SessionAttributes`:用于指定要存储在会话中的模型属性名称。 - `@ModelAttribute("model")`:用于将方法的返回值添加到模型中。 ##### 4.2 参数绑定 - **简单类型绑定**:自动绑定基本类型(如String、int等...
#### 四、`@ModelAttribute` 和 `@SessionAttributes` 1. **`@ModelAttribute`**:用于将方法的返回值添加到模型中,也可以用于方法参数,将请求参数自动转换为方法参数类型。当作用于方法时,该方法会在实际请求...