Springmvc @ModelAttribute和@SessionAttribute的区别


1.@ModelAttribute

a.注解在方法上

注解在方法上的 @ModelAttribute  说明了方法的作用是用于添加一个或多个属性到model上。这样的方法能接受与 @RequestMapping 注解相同的参数类型,只不过不能直接被映射到具体的请求上。在同一个控制器中,注解了@ModelAttribute的方法实际上会在@RequestMapping 方法之前被调用


@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountManager.findAccount(number);
}
// Add multiple attributes
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountManager.findAccount(number));
// add more ...
}


在第一种写法中,方法通过返回值的方式默认地将添加一个属性;在第二种写法中,方法接收一个 Model  对象,然后可以向其中添加任意数量的属性


b.注解在参数上

注解在方法参数上的 @ModelAttribute  说明了该方法参数的值将由model中取得。如果model
中找不到,那么该参数会先被实例化,然后被添加到model中。在model中存在以后,请求中
所有名称匹配的参数都会填充到该参数中

@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.P
OST)
public String processSubmit(@ModelAttribute Pet pet) { }


2.@SessionAttributes

@SessionAttributes用来标注那些数据可以通过Session来管理(其实也可以用作http请求之间转换时,数据的存储)

@SessionAttributes允许通过两种方法来管理将那些数据存进session中,一种通过类型,一种是通过属性名称

例如:

通过属性名称来吧数据存储到session中

@Controller
@RequestMapping("/reportSetting.anno")
@SessionAttributes(names="command")
public class ReportSettingAnnotationController {
	
	public final static String FROM_VIEW_NAME = "anno/reportSetting";
  
	@Autowired
	private IReportSettingManager reportSettingManager;
	
	@RequestMapping(method=RequestMethod.GET)
	public String displayReportSettings(ModelMap model){
		ReportSetting reportSettings = getReportSettingManager().getReportSettings();
		model.addAttribute("command", reportSettings);
	}
	
	public String updateReportSetting(@ModelAttribute("command")ReportSetting reportSettings,BindingResult result,SessionStatus status){
		if(result.hasErrors()){
		return 	FROM_VIEW_NAME;
		}
		getReportSettingManager().updateReportSettings(reportSettings);
		status.setComplete();  //表示将使用完的数据清理出session
		return "redirect:reportSetting.anno";
	}
}

通过类型把数据存储到session中

@SessionAttributes(types=ReportSetting.class)



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值