SpringMVC中@ModelAttribute的应用

@ModelAttribute简介

被@ModelAttribute注释的方法会在此controller每个方法执行前被执行。
因此对于一个controller映射多个URL的用法来说,要谨慎使用。更好的方法是使用@Controller的时候同时加上@RequestMapping(value = ‘xxx’),以便把Mapping分开多级目录管理

例如下面这个UserController,他只管User的事情,所以Mapping都是User下的。
这样可以没有顾虑地使用@ModelAttribute。

@Controller
@RequestMapping(value = "user")
public class UserController {
    @Autowired
    private TbUserService tbUserService;

    //在所有@RequestMapping之前执行
    @ModelAttribute
    public TbUser getTbUser(Long id) {
        TbUser tbUser = null;
        if(id != null){
            tbUser = tbUserService.getById(id);
        }else{
            tbUser = new TbUser();
        }
        return tbUser;
    }
    
    @RequestMapping(value = "save",method = RequestMethod.POST)
    public String save(TbUser tbUser,Model model, RedirectAttributes redirectAttributes){
        BaseResult baseResult = tbUserService.save(tbUser);
        if(baseResult.getStatus()==BaseResult.STATUS_SUCCESS){
            redirectAttributes.addFlashAttribute("baseResult",baseResult);
            return "redirect:/user/list";
        }else{
            model.addAttribute("baseResult",baseResult);
            return "user_form";
        }
    }

@ModelAttribute用法

如刚刚的那段代码中的最后一个方法(save),tbUserService.save(Tbuser tbuser)方法会根据传入的tbuser是否已经有id值进行新建或更新用户操作,以修改操作为例:
tbUserService.save(Tbuser tbuser)的参数是由使用了@ModelAttribute的getTbUser(Long id)方法的返回值tbuser得到的。也就是说在进行一次修改操作时,修改前的数据来源于数据库而不是前端,这能提高执行并发环境下修改操作的安全性

发布了41 篇原创文章 · 获赞 27 · 访问量 5835

猜你喜欢

转载自blog.csdn.net/weixin_43217564/article/details/103452292
今日推荐