顯示具有 redirect 標籤的文章。 顯示所有文章
顯示具有 redirect 標籤的文章。 顯示所有文章

2017年12月26日 星期二

Java Spring - Carrying data across redirect requests

  • redirect
    • 處理完POST後,通常都會執redirect。這樣能夠防止點擊refresh或back時,client重新執行危險的POST
    • 通常使用redirect: prefix能夠重新定位
    • return "redirect:/spitter/" + spitter.getUsername();
      
    • 問: 如何發送data給redirect的目標method?
    • 答: 當一個controller method完成之後,這個method所指定的model data將會複製到request中,並作為request的property,request會forward到view上。因為controller method和view處理的是同一個request,所以在forward過程中,request property也能夠保存。但當controller是redirect時,原始的request就消失了,並且會發起一個新的GET request。原始request中所帶有的model data也跟著request消失了,在新的request上,沒有任何的model data,這個request必須要自己計算data
    • 有一些方法能夠使用redirect但又能夠將data傳遞給redirect的method中
      • 使用URL template 以path variable或或query parameter的形式
      • 透過flash attribute發送data

2017年12月25日 星期一

Java Spring - 搭建Spring MVC (2)

  • Accept request parameter
    • Spring MVC允許多種方式將client的data傳到controller method中
      1. Query parameter
      2. Form parameter
      3. Path variable
  • 處理Query parameter
    • 翻頁功能,讓使用者可以選擇要看哪一頁
    • 假設要查看某一頁的Spittle列表,則這個list會按照最新的Spittle在前進行排序,因此下一頁的第一筆ID早於前一頁的最後一筆ID
    • 為了顯示下一頁的Spittle,需要將一個Spittle的ID傳入
    • 也可以傳入一個parameter確定要展現的Spittle counts
    • 需要寫的controller method要處理以下參數
      • before parameter
      • count parameter
    • 將spittles() method替換為使用上述兩個parameter的新spittles() method