Spring 注解 @ModelAttribute




Spring MVC 表单标签库

http://www.funtl.com/zh/spring-mvc/Spring-MVC-%E8%A1%A8%E5%8D%95%E6%A0%87%E7%AD%BE%E5%BA%93.html#%E5%8D%95%E9%80%89%E6%8C%89%E9%92%AE%EF%BC%88%E5%A4%9A%E9%80%89%EF%BC%89

JQuery Validation+Bootstrap(前端验证)

http://www.funtl.com/zh/supplement1/jQuery-Validation.html#%E9%A1%B5%E9%9D%A2%E5%BC%95%E7%94%A8

JQuery iCheck+Bootstrap(前端复选框)

http://www.funtl.com/zh/supplement1/jQuery-iCheck.html#%E6%BF%80%E6%B4%BB-icheck

什么是 @ModelAttribute?

  • 绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用
  • 暴露 @RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用
  • 暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping 注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用

即简化AOP编程,不使用拦截器在同一Controller下直接进行拦截或者预处理,其属性会继承给每一个RequestMapping的视图层.

例子

package com.funtl.my.shop.web.admin.web.controller;

import com.funtl.my.shop.commons.dto.BaseResult;
import com.funtl.my.shop.domain.TbUser;
import com.funtl.my.shop.web.admin.service.TbUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.List;

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

    @ModelAttribute
    public TbUser getTbUser(Long id){
        TbUser tbUser=null;
        if(id!=null){
            tbUser=tbUserService.getById(id);
        }

        else{
            tbUser=new TbUser();
        }
        return tbUser;
    }


    /**
     * 跳转到用户列表页
     * @param model
     * @return
     */
    @RequestMapping(value="list",method= RequestMethod.GET)
    public String list(Model model){
        List<TbUser> tbUsers=tbUserService.selectAll();
        model.addAttribute("tbUsers",tbUsers);
        return "user_list";
    }

    @RequestMapping(value="form",method=RequestMethod.GET)
    public String form(){
        return "user_form";
    }

    @RequestMapping(value="save",method=RequestMethod.POST)
    public String save(TbUser tbUser, Model model,RedirectAttributes redirectAttributes){
        BaseResult baseResult=tbUserService.save(tbUser);
        //保存成功
        if(baseResult.getStatus()==200){
            redirectAttributes.addFlashAttribute("baseResult",baseResult);
            return "redirect:/user/list";
        }
        //保存失败
        else{
            model.addAttribute("baseResult",baseResult);
            return "user_form";
        }
    }
}

这样操作过后可以很轻松的将 预处理的TbUser绑定到Model上.

发表评论