Spring MVC(十一)--使用字符串實現重定向


Spring MVC中有兩種重定向方式:

  • 通過返回字符串,字符串必須以redirect:開頭;
  • 通過返回ModelAndView;

重定向的時候如果需要給重定向目標方法傳參數,要分字符串參數和pojo對象參數兩種,先來總結一下通過返回字符串重定向的方式。

直接模擬一種場景:我在頁面點擊下一步按鈕,會跳轉到新的頁面,中間通過重定向傳遞一些參數,如下圖:

我的第一個頁面:

點擊右下角的下一頁按鈕之后,跳轉到下面的頁面:

將重定向傳遞過來的參數顯示在第一個方塊中指定的位置,這就是需要實現的功能,下面是編碼過程。頁面的代碼省略,只貼重要部分。

1、給按鈕綁定請求事件

// 點擊下一頁進行跳轉
    $("#nextPage").click(function() {
        window.location.href = "../jump/ToNextPage";
    });

2、創建控制器

第一步中的請求路徑是../jump/ToNextPage,所以首先需要創建一個控制器,它的訪問路徑為/jump,然后創建一個方法,它的訪問路徑為並ToNextPage ,並在此方法中實現重定向功能。

@Controller
@RequestMapping("/jump")
public class JumpController {

    /**
     * 通過返回字符串實現重定向 注意⚠️:通過Model傳遞字符串參數
     * 
     * @param model
     * @return
     */
    @RequestMapping("ToNextPage")
    public String jumpToNextPage(Model model) {
        model.addAttribute("username", "Spring MVC");
        model.addAttribute("msg", "Welcome to my house");
        return "redirect:./nextPage";
    }

    @RequestMapping("nextPage")
    public ModelAndView nextPage(String username, String msg) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("userName", username);
        mv.addObject("msg", msg);
        mv.setViewName("jump/jump");
        return mv;
    }
}

上面代碼中紅色加粗部分為重點:

  • Model model:使用Model數據模型傳遞字符串參數;
  • redirect:./nextPage:返回字符串,字符串以redirect:開頭時,Spring MVC會將它視為重定向處理;
  • String username,String msg:重定向到的方法中接受參數時直接使用字符串接受,且參數名稱就是在數據模型Model中定義的key;

在重定向之后的方法中,將獲取到的參數渲染到了視圖jump中,這樣就能在視圖中獲取這兩個參數了。

3、在重定向頁面獲取傳遞的參數

<div class="simple public">
    <p style="text-align: center;">字符串重定向</p>
    <p>Hello ${userName },${msg }</p>
</div>

上面代碼中紅色加粗的部分就是獲取通過重定向傳遞過來的參數。

4、測試

上面傳遞的參數為

  • username:Spring MCV
  • msg:Welcome to my house

查看結果:

從上面的結果中可以看出:

  • 點擊下一頁之后URL變成了重定向的路徑,並且帶有參數;
  • 在之前要顯示參數的位置獲取到了傳遞過來的參數;

所以重定向成功。在上面的重定向過程中,傳遞的參數是個字符串,而且只能用Model數據模型傳遞,有時候需要傳遞一個pojo對象,但是HTTP的重定向參數是以字符串傳遞的,在Spring MVC中可以使用RedirectAttributes對象的addFlashAttribute傳遞pojo對象,它的原理是將數據保存在session中,重定向之后將其清除。

5、重定向傳遞POJO對象

還是上面的場景,只不過這次將重定向參數改為pojo對象,代碼如下:

@Controller
@RequestMapping("/jump")
public class JumpController {

    @RequestMapping("ToNextPage1")
    public String jumpToNextPage1(RedirectAttributes ra) {
        Param param = new Param();
        param.setParamName("Spring MVC");
        param.setParamDesc("歡迎加入");
        ra.addFlashAttribute("param", param); return "redirect:./nextPage1";
    }

    @RequestMapping("nextPage1")
    public ModelAndView nextPage(Param param) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("userName", param.getParamName());
        mv.addObject("msg", param.getParamDesc());
        mv.setViewName("jump/jump");
        return mv;
    }
}

上面代碼中紅色加粗的部分是重點:

  • RedirectAttributes ra:通過這個對象的addFlashAttribute方法傳遞pojo對象參數;
  • 在重定向后的方法中直接接受一個pojo對象即可;

看一下頁面跳轉情況

從結果可以看出,跳轉之后URL為重定向之后的路徑,雖然路徑中不帶有參數但是pojo參數傳遞成功了!

6、總結

 上面的例子使用返回字符串的方式演示了Spring MVC中的重定向過程,以及重定向過程中傳遞參數的方法,需要注意以下幾點:

  • 返回字符串重定向時,字符串中必須含有redirect,最好是以redirect開頭;
  • 傳遞字符串參數使用Model數據模型;傳遞pojo參數使用RedirectAttributes類中的addFlashAttribute方法;
  • 不能同時使用兩種方式傳遞參數;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM