程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> springmvc學習筆記(10)-springmvc注解開發之商品修改功能

springmvc學習筆記(10)-springmvc注解開發之商品修改功能

編輯:JAVA綜合教程

springmvc學習筆記(10)-springmvc注解開發之商品修改功能


springmvc學習筆記(10)-springmvc注解開發之商品修改功能


本文以商品修改為例,記錄springmvc的注解開發,包括mapper,service,controller,@RequestMapping,controller方法的返回值等

需求

操作流程:

1.進入商品查詢列表頁面 2.點擊修改,進入商品修改頁面,頁面中顯示了要修改的商品。要修改的商品從數據庫查詢,根據商品id(主鍵)查詢商品信息 3.在商品修改頁面,修改商品信息,修改後,點擊提交

開發mapper

mapper:

根據id查詢商品信息 根據id更新Items表的數據

不用開發了,使用逆向工程生成的代碼。

開發service

com.iot.learnssm.firstssm.service.ItemsService中添加兩個接口

  //根據id查詢商品信息
    /**
     *
     * 

Title: findItemsById

*

Description:

* @param id 查詢商品的id * @return * @throws Exception */ ItemsCustom findItemsById(Integer id) throws Exception; //修改商品信息 /** * *

Title: updateItems

*

Description:

* @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
[email protected]("/items")
public class ItemsController {

    @Autowired
    private ItemsService itemsService;

    //商品查詢列表
    @RequestMapping("/queryItems")
    //實現 對queryItems方法和url進行映射,一個方法對應一個url
    //一般建議將url和方法寫成一樣
    public ModelAndView queryItems() throws Exception{
        //調用service查找數據庫,查詢商品列表
        List 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
    [email protected](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的鏈接進行方法限制。

//商品信息修改頁面顯示
    [email protected]("/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})
[email protected]裡邊指定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串");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved