最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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ù)傳到頁面,只要配置視圖解析器,把參數(shù)添加到Model中,在頁面用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("用戶提交了一次表單"); 
    String username; 
    if (user.get("name").isEmpty()) { 
      username = "Tom"; 
    } else { 
      username = user.get("name"); 
    } 
    model.addAttribute("msg", username); 
//    return "home";//此方式跳轉(zhuǎn),頁面刷新會(huì)重復(fù)提交表單 
    return "redirect:/home.jsp"; 
  } 
 
} 

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

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

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

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

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

這個(gè)方法原理是放到session中,session在跳到頁面后馬上移除對(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("用戶提交了一次表單"); 
    String username; 
    if (user.get("name").isEmpty()) { 
      username = "Tom"; 
    } else { 
      username = user.get("name"); 
    } 
    model.addFlashAttribute("msg", username); 
//   return "home";//此方式跳轉(zhuǎn),頁面刷新會(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

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

相關(guān)文章

最新評(píng)論

名山县| 绩溪县| 屯昌县| 浦江县| 淮安市| 洛浦县| 伊吾县| 景德镇市| 永丰县| 洛扎县| 都匀市| 墨竹工卡县| 镇雄县| 琼海市| 阜阳市| 河北省| 井研县| 嵊泗县| 获嘉县| 和林格尔县| 新乐市| 望江县| 成都市| 鄂伦春自治旗| 汾阳市| 自治县| 文水县| 普洱| 滨海县| 西乌珠穆沁旗| 珠海市| 大足县| 乌兰县| 娱乐| 安龙县| 泽州县| 常宁市| 呼和浩特市| 台南县| 股票| 宝丰县|