亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解SpringMVC重定向傳參數(shù)的實(shí)現(xiàn)

 更新時(shí)間:2017年01月20日 17:19:37   作者:Joepis  
本篇文章主要介紹了詳解SpringMVC重定向傳參數(shù)的實(shí)現(xiàn),我們可以使用重定向的方式,改變?yōu)g覽器的地址欄,防止表單因?yàn)樗⑿轮貜?fù)提交。有興趣的可以了解一下。

在spring的一個(gè)controller中要把參數(shù)傳到頁(yè)面,只要配置視圖解析器,把參數(shù)添加到Model中,在頁(yè)面用el表達(dá)式就可以取到。但是,這樣使用的是forward方式,瀏覽器的地址欄是不變的,如果這時(shí)候?yàn)g覽器F5刷新,就會(huì)造成表單重復(fù)提交的情況。所以,我們可以使用重定向的方式,改變?yōu)g覽器的地址欄,防止表單因?yàn)樗⑿轮貜?fù)提交。

jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
  pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>login</title> 
</head> 
<body> 
   
  <form id="form1" action="/demo/user/login" method="post"> 
    賬號(hào):<input type="text" name="name" /></br> 
    密碼:<input type="password" name="password" /></br> 
    <input type="submit" value="submit"/> 
     
  </form> 
 
</body> 
</html> 

controller:

package com.demo.controller; 
 
import java.util.Map; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
 
/** 
 * @author lpj 
 * @date 2016年7月10日 
 */ 
@Controller 
@RequestMapping("/user") 
public class DemoController { 
 
  @RequestMapping("/login") 
  public String login(@RequestParam Map<String, String> user, Model model) { 
    System.out.println("用戶(hù)提交了一次表單"); 
    String username; 
    if (user.get("name").isEmpty()) { 
      username = "Tom"; 
    } else { 
      username = user.get("name"); 
    } 
    model.addAttribute("msg", username); 
//    return "home";//此方式跳轉(zhuǎn),頁(yè)面刷新會(huì)重復(fù)提交表單 
    return "redirect:/home.jsp"; 
  } 
 
} 

由于重定向相當(dāng)于2次請(qǐng)求,所以無(wú)法把參數(shù)加在model中傳過(guò)去。在上面例子中,頁(yè)面獲取不到msg參數(shù)。要想獲取參數(shù),可以手動(dòng)拼url,把參數(shù)帶在后面。

Spring 3.1 提供了一個(gè)很好用的類(lèi):RedirectAttributes。 使用這個(gè)類(lèi),我們可以把參數(shù)隨著重定向傳到頁(yè)面,不需自己拼url了。

把上面方法參數(shù)中的Model換成RedirectAttributes,參數(shù)就自動(dòng)跟在url后了。

但是,這樣頁(yè)面不能用el獲取到,還要另外處理,所以,我們還有一種方式,不拼url,用el獲取參數(shù),就像普通轉(zhuǎn)發(fā)一樣。

還是使用RedirectAttributes,但是這次不用addAttribute方法,spring為我們準(zhǔn)備了新方法,addFlashAttribute()。

這個(gè)方法原理是放到session中,session在跳到頁(yè)面后馬上移除對(duì)象。所以你刷新一下后這個(gè)值就會(huì)丟失。

package com.demo.controller; 
 
import java.util.Map; 
 
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.RequestParam; 
import org.springframework.web.servlet.mvc.support.RedirectAttributes; 
 
/** 
 * @author lpj 
 * @date 2016年7月10日 
 */ 
@Controller 
@RequestMapping("/user") 
public class DemoController { 
 
  @RequestMapping("/login") 
// public String login(@RequestParam Map<String, String> user, Model model) { 
  public String login(@RequestParam Map<String, String> user, RedirectAttributes model) { 
    System.out.println("用戶(hù)提交了一次表單"); 
    String username; 
    if (user.get("name").isEmpty()) { 
      username = "Tom"; 
    } else { 
      username = user.get("name"); 
    } 
    model.addFlashAttribute("msg", username); 
//   return "home";//此方式跳轉(zhuǎn),頁(yè)面刷新會(huì)重復(fù)提交表單 
    return "redirect:/user/toHome"; 
  } 
   
  @RequestMapping("/toHome") 
  public String home(@ModelAttribute("msg") String msg, Model model) { 
    System.out.println("拿到重定向得到的參數(shù)msg:" + msg); 
    model.addAttribute("msg", msg); 
    return "home"; 
  } 
} 

這邊我們使用@ModelAttribute注解,獲取之前addFlashAttribute添加的數(shù)據(jù),之后就可以正常使用啦。

需要例子代碼的可以點(diǎn)此下載:http://xiazai.jb51.net/201701/yuanma/springmvcdemo_jb51.rar

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能

    SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能

    這篇文章主要詳細(xì)介紹了SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能的步驟詳解,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀
    2023-06-06
  • maven打包時(shí)候修改包名稱(chēng)帶上git版本號(hào)和打包時(shí)間方式

    maven打包時(shí)候修改包名稱(chēng)帶上git版本號(hào)和打包時(shí)間方式

    這篇文章主要介紹了maven打包時(shí)候修改包名稱(chēng)帶上git版本號(hào)和打包時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java AbstractMethodError案例分析詳解

    Java AbstractMethodError案例分析詳解

    這篇文章主要介紹了Java AbstractMethodError案例分析詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 類(lèi)似Object監(jiān)視器方法的Condition接口(詳解)

    類(lèi)似Object監(jiān)視器方法的Condition接口(詳解)

    下面小編就為大家?guī)?lái)一篇類(lèi)似Object監(jiān)視器方法的Condition接口(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn)

    SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn)

    本文主要介紹了SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 最新評(píng)論