springmvc @SessionAttributes @ModelAttribute 取session值问题
public class User implements Serializable{
private String id;
@Controller
@SessionAttributes(Constants.USER_INFO_SESSION)
public class LoginControll {
@RequestMapping(value = "login.html", method = RequestMethod.POST)
public String login(
@RequestParam(value = "username", required = false) String username,
@RequestParam(value = "password", required = false) String password,
@ModelAttribute(Constants.USER_INFO_SESSION)SysUser user,
HttpSession session
Model model) {
SysUser user = userService.validateLogin(username, password);
System.out.println(user.getId());
model.addAttribute(Constants.USER_INFO_SESSION);
return Constants.RESULT_SUCCESS;
}
}
输出:
11000
@Controller
@RequestMapping("/User")
@SessionAttributes(Constants.USER_INFO_SESSION)
public class UserControll {
public @ResponseBody List<?> list(
@RequestParam(value = "node", required = false)String node,
@ModelAttribute(Constants.USER_INFO_SESSION)SysUser user,
HttpSession session
) {
System.out.println("user.getId():"+user.getId());
User u = (User)session.getAttribute(Constants.USER_INFO_SESSION);
System.out.println("u.getId():"+u.getId());
输出:
user.getId():00
u.getId():00
session去USER对象id值变成了'00'
发现请求参数中有同名id,值是'00'
@Controller
@RequestMapping("/User")
@SessionAttributes(Constants.USER_INFO_SESSION)
public class UserControll {
public @ResponseBody List<?> list(
@RequestParam(value = "node", required = false)String node,
@RequestParam(value = "id", required = false)String id,
@ModelAttribute(Constants.USER_INFO_SESSION)SysUser user,
HttpSession session
) {
System.out.println("id:" + id);
System.out.println("user.getId():"+user.getId());
User u = (User)session.getAttribute(Constants.USER_INFO_SESSION);
System.out.println("u.getId():"+u.getId());
输出:
id:00
user.getId():00
u.getId():00
请求中参数有同名id,会覆盖session中所有对象同名属性值
改成如下
@Controller
@RequestMapping("/User")
public class UserControll {
public @ResponseBody List<?> list(
@RequestParam(value = "node", required = false)String node,
@RequestParam(value = "id", required = false)String id,
HttpSession session
) {
System.out.println("id:" + id);
User u = (User)session.getAttribute(Constants.USER_INFO_SESSION);
System.out.println("u.getId():"+u.getId());
输出:
id:00
u.getId():11000
分享到:
相关推荐
虽然`@ModelAttribute`主要处理请求级的数据,但Spring MVC还提供了`@SessionAttributes`注解,用于将某些模型对象保存在session中,跨多个请求保持状态。`@SessionAttributes`通常用于处理那些在多个请求之间需要...
SpringMVC 3.1.1版本的源码中,Controller接口和相关注解(如@RequestMapping、@SessionAttributes、@ModelAttribute)的实现提供了上述功能的基础。通过阅读源码,我们可以更深入地理解这些特性的内部工作原理。 ...
当控制器类被标注了`@SessionAttributes`注解时,SpringMVC会将模型中对应的属性暂存到`HttpSession`中。 **示例代码:** ```java @SessionAttributes(value = {"user"}) public class UserController { @...
在这个示例中,`@SessionAttributes`注解使`User`对象在登录后被自动保存在Session中,后续的`protectedPage`请求可以直接通过`@ModelAttribute`从Session中恢复。 总结起来,Spring MVC中的Model用于在单个请求...
1. **模型属性注入**:当`@ModelAttribute`注解在方法参数上时,Spring MVC会尝试从请求参数、模型或会话中找到匹配的属性值,将其绑定到该参数对象。 2. **模型更新**:若`@ModelAttribute`注解在方法上,那么该...
以上是对SpringMVC中注解的概述,实际开发中还有许多其他注解,如`@SessionAttribute`、`@CookieValue`、`@RequestParam`等,它们共同构成了SpringMVC强大的注解驱动机制。理解并熟练运用这些注解,能让你在...
在`logout()`方法中,获取并清除Session中的"manager"键对应的值,实现用户登出。 **方法二:使用`@SessionAttributes`注解** Spring MVC提供了一个`@SessionAttributes`注解,它可以自动将模型属性与Session关联...
SpringMVC通过@ModelAttribute注解帮助模型和视图间的数据传递。 3. **Controller接口和@RequestMapping**:Controller接口定义了处理请求的方法,而@RequestMapping注解用于指定URL映射,可以基于HTTP方法(GET, ...
`@SessionAttributes` 注解用于将特定属性存储在 session 中,以便跨请求访问。`@ModelAttribute` 注解通常用于在请求处理前预先填充一个对象,便于后续操作。 ### 第 5 章 视图解析 SpringMVC 使用 `ViewResolver`...
public String handle6(@CookieValue(value="sessionId", required=false) String session) { System.out.println(session); } ``` 6. **属性注入方式注入POJO对象:** - 支持级联属性注入,例如: ```java ...
本文主要围绕"SSM笔记-处理模型数据"这一主题,深入探讨ModelAndView、ModelAttribute以及SessionAttributes在SpringMVC中的应用。 首先,我们来理解ModelAndView。在SpringMVC中,Controller处理完业务逻辑后,...
Session可以使用@SessionAttributes注解来指定Session的名称和范围。 类型转换 SpringMVC提供了类型转换的机制,例如Converter接口,可以自定义类型转换器来实现类型转换。 总结 SpringMVC是基于Java的开源web...
- `@CookieValue` 和 `@SessionAttributes`:从 Cookie 或 Session 中获取值。 **6. 异常处理** - `@ExceptionHandler`:处理特定类型的异常,提供统一的错误页面或响应。 - `@ControllerAdvice`:全局的控制器增强...
另外,`@ModelAttribute`注解用于将请求参数绑定到Java对象,`@SessionAttributes`则可以管理session中的数据。还有`@ExceptionHandler`用于全局处理异常,提供统一的错误页面或API响应。 综上所述,Spring MVC的...
9. `@SessionAttributes`:标记需要存储在HTTP Session中的属性。这些属性可以在多个请求之间共享,例如在购物车应用中。 10. `@Autowired`:Spring的依赖注入注解,自动将匹配的Bean注入到当前字段或方法中。它...
10. `@SessionAttributes`:用于将模型属性存储在HTTP session中,跨多个请求共享。 11. `@Autowired`:Spring的依赖注入注解,自动将符合类型的bean注入到当前字段或方法参数中。 12. `@Qualifier`:配合`@...
SpringMVC还支持数据绑定,可以通过`@RequestParam`从请求参数中获取值,或者`@ModelAttribute`将数据绑定到模型对象。此外,可以使用`@SessionAttributes`来管理session级别的数据。 在实际应用中,我们可能还需要...
在这个过程中,SpringMVC提供了多种机制来实现数据回显,包括模型数据导向视图、@ModelAttribute、Map Model和SessionAttributes等。 模型数据导向视图 在SpringMVC中,模型数据是指控制器传递给视图的数据。模型...
- **@SessionAttributes**:指定要存储在session中的属性。 ### 五、SpringMVC的高级特性 #### 5.1 数据绑定 - **自动类型转换**:SpringMVC能够自动将字符串类型的请求参数转换为目标对象的数据类型。 - **数据...
5. `@SessionAttributes`:用于指定哪些属性存储在HTTP Session中。 6. `@ExceptionHandler`:用于处理异常情况。 #### 六、SpringMVC与Struts2的区别 1. **配置方式**:SpringMVC倾向于使用声明式编程,通过注解或...