mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

springmvc学习笔记(10)-springmvc注解开发之商品改动功能

标签: springmvc



本文以商品改动为例,记录springmvc的注解开发。包含mapper,service,controller,@RequestMapping,controller方法的返回值等

需求

操作流程:

  • 1.进入商品查询列表页面
  • 2.点击改动,进入商品改动页面,页面中显示了要改动的商品。要改动的商品从数据库查询,依据商品id(主键)查询商品信息
  • 3.在商品改动页面,改动商品信息,改动后,点击提交

开发mapper

mapper:

  • 依据id查询商品信息
  • 依据id更新Items表的数据

不用开发了,使用逆向project生成的代码。

开发service

com.iot.learnssm.firstssm.service.ItemsService中加入两个接口

  //依据id查询商品信息
    /**
     *
     * <p>Title: findItemsById</p>
     * <p>Description: </p>
     * @param id 查询商品的id
     * @return
     * @throws Exception
     */
     ItemsCustom findItemsById(Integer id) throws Exception;

    //改动商品信息
    /**
     *
     * <p>Title: updateItems</p>
     * <p>Description: </p>
     * @param id 改动商品的id
     * @param itemsCustom 改动的商品信息
     * @throws Exception
     */
     void updateItems(Integer id,ItemsCustom itemsCustom) throws Exception;

com.iot.learnssm.firstssm.service.impl.ItemsServiceImpl中实现接口,添加itemsMapper属性

@Autowired
private ItemsMapper itemsMapper;

public ItemsCustom findItemsById(Integer id) throws Exception {
    Items items = itemsMapper.selectByPrimaryKey(id);
    //中间对商品信息进行业务处理
    //....
    //返回ItemsCustom
    ItemsCustom itemsCustom = new ItemsCustom();
    //将items的属性值复制到itemsCustom
    BeanUtils.copyProperties(items, itemsCustom);

    return itemsCustom;
}

public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
    //加入业务校验,通常在service接口对关键參数进行校验
    //校验 id是否为空,假设为空抛出异常

    //更新商品信息使用updateByPrimaryKeyWithBLOBs依据id更新items表中全部字段。包含 大文本类型字段
    //updateByPrimaryKeyWithBLOBs要求必须转入id
    itemsCustom.setId(id);
    itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
}

开发controller

方法:

  • 商品信息改动页面显示
  • 商品信息改动提交
//使用@Controller来标识它是一个控制器
@Controller
//为了对url进行分类管理 ,能够在这里定义根路径,终于訪问url是根路径+子路径
//比方:商品列表:/items/queryItems.action
//@RequestMapping("/items")
public class ItemsController {

    @Autowired
    private ItemsService itemsService;

    //商品查询列表
    @RequestMapping("/queryItems")
    //实现 对queryItems方法和url进行映射。一个方法相应一个url
    //一般建议将url和方法写成一样
    public ModelAndView queryItems() throws Exception{
        //调用service查找数据库,查询商品列表
        List<ItemsCustom> itemsList = itemsService.findItemsList(null);

        //返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        //相当于request的setAttribute方法,在jsp页面中通过itemsList取数据
        modelAndView.addObject("itemsList",itemsList);

        //指定视图
        //下边的路径,假设在视图解析器中配置jsp的路径前缀和后缀,改动为items/itemsList
        //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        //下边的路径配置就能够不在程序中指定jsp路径的前缀和后缀
        modelAndView.setViewName("items/itemsList");

        return modelAndView;
    }


    //商品信息改动页面显示
    @RequestMapping("/editItems")
    //限制http请求方法,能够post和get
    //@RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
    public ModelAndView editItems()throws Exception {

        //调用service依据商品id查询商品信息
        ItemsCustom itemsCustom = itemsService.findItemsById(1);

        // 返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();

        //将商品信息放到model
        modelAndView.addObject("itemsCustom", itemsCustom);

        //商品改动页面
        modelAndView.setViewName("items/editItems");

        return modelAndView;
    }

    //商品信息改动提交
    @RequestMapping("/editItemsSubmit")
    public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom)throws Exception {

        //调用service更新商品信息,页面须要将商品信息传到此方法
        itemsService.updateItems(id, itemsCustom);

        //返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        //返回一个成功页面
        modelAndView.setViewName("success");
        return modelAndView;
    }

}

@RequestMapping

  • url映射

定义controller方法相应的url,进行处理器映射使用。

  • 窄化请求映射
//使用@Controller来标识它是一个控制器
@Controller
//为了对url进行分类管理 。能够在这里定义根路径,终于訪问url是根路径+子路径
//比方:商品列表:/items/queryItems.action
@RequestMapping("/items")
public class ItemsController {
  • 限制http请求方法

出于安全性考虑。对http的链接进行方法限制。

//商品信息改动页面显示
    //@RequestMapping("/editItems")
    //限制http请求方法。能够post和get
    @RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
    public ModelAndView editItems()throws Exception {

假设限制请求为post方法。进行get请求,即将上面代码的注解改为@RequestMapping(value="/editItems",method={RequestMethod.POST})

报错,状态码405:

GET拒绝

controller方法的返回值

  • 返回ModelAndView

须要方法结束时,定义ModelAndView,将model和view分别进行设置。

  • 返回string

假设controller方法返回string

1.表示返回逻辑视图名。

真正视图(jsp路径)=前缀+逻辑视图名+后缀

@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
//@RequestParam里边指定request传入參数名称和形參进行绑定。

//通过required属性指定參数是否必须要传入 //通过defaultValue能够设置默认值。假设id參数没有传入。将默认值和形參绑定。 //public String editItems(Model model, @RequestParam(value="id",required=true) Integer items_id)throws Exception { public String editItems(Model model)throws Exception { //调用service依据商品id查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(1); //通过形參中的model将model数据传到页面 //相当于modelAndView.addObject方法 model.addAttribute("itemsCustom", itemsCustom); return "items/editItems"; }

2.redirect重定向

商品改动提交后,重定向到商品查询列表。

redirect重定向特点:浏览器地址栏中的url会变化。改动提交的request数据无法传到重定向的地址。由于重定向后又一次进行request(request无法共享)

//重定向到商品查询列表
//return "redirect:queryItems.action";

3.forward页面转发

通过forward进行页面转发,浏览器地址栏url不变,request能够共享。

//页面转发
return "forward:queryItems.action";
  • 返回void

在controller方法形參上能够定义request和response。使用request或response指定响应结果:

1.使用request转向页面,例如以下:

request.getRequestDispatcher("页面路径").forward(request, response);

2.也能够通过response页面重定向:

response.sendRedirect("url")

3.也能够通过response指定响应结果。比如响应json数据例如以下:

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

作者@brianway很多其它文章:个人站点 | CSDN | oschina

posted on 2017-07-03 14:15  mthoutai  阅读(302)  评论(0编辑  收藏  举报