<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
要求前臺頁面的表單輸入框的name屬性值與對應控制器方法中的形式引數名稱與型別一致,控制器方法就能接收到來自前臺表單傳過來的引數,即請求引數與方法形參要完全相同,這些引數由系統在呼叫時直接賦值,程式設計師可在方法內直接使用。
專案案例: 輸入學生姓名、年齡和分數,提交成功則跳轉到提交成功的介面並展示資料。
關鍵步驟:
【1】在 Controller 層新建一個 TestController1 類,並新增一個方法,程式碼如下:
package cn.hh.test02.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("testc1") public class TestController1 { @RequestMapping("login") public ModelAndView login(String sName,int sAge, double sScore ){ ModelAndView mv = new ModelAndView(); mv.setViewName("test1/show"); mv.addObject("currentShow",sName+"年齡:"+sAge+",分數:"+sScore); return mv; } }
【2】在 webapp 目錄下,新建一個目錄 test1,在 test1 中新建 test1.jsp 檔案,程式碼如下:
<%-- Created by IntelliJ IDEA. User: hhzb100 Date: 2023/2/28 Time: 10:23 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="../testc1/login"> 姓名:<input type="text" name="sName"> 年齡:<input type="text" name="sAge"> 分數:<input type="text" name="sScore"> <input type="submit" value="提交資料"> </form> </body> </html>
【3】再在上面的目錄裡新建 show.jsp 檔案,程式碼如下:
<%-- Created by IntelliJ IDEA. User: hhzb100 Date: 2023/2/26 Time: 11:29 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>提交成功!${currentShow}</h1> </body> </html>
【4】在瀏覽器中輸入 http://localhost:8080/testspringmvc02/test1/test1.jsp,如下圖:
新增資料並提交,展示效果如下:
當表單的 name 屬性值與方法引數的名稱不同時,會出現如下圖所示的500錯誤:
表單的 name 屬性值內容修改如下:
<form action="../testc1/login"> 姓名:<input type="text" name="stuName"> 年齡:<input type="text" name="stuAge"> 分數:<input type="text" name="stuScore"> <input type="submit" value="提交資料"> </form>
而 TestController1 處理器中的方法引數分別為:sName、sAge、sScore;
則在接受方法的形參前面加個 @RequestParam(“表單 name 屬性值”), TestController1 類程式碼修改如下:
//1、表單 name 屬性值與方法引數名稱不一致解決方案 @RequestMapping("login") public ModelAndView login(@RequestParam("stuName") String sName, @RequestParam("stuAge")int sAge, @RequestParam("stuScore")double sScore ){ ModelAndView mv = new ModelAndView(); mv.setViewName("test1/show"); mv.addObject("currentShow",sName+"年齡:"+sAge+",分數:"+sScore); return mv; }
當表單某個 name 屬性值為空時,執行效果如下:
解決辦法: 設定基本引數型別的預設值 @RequestParam(defaultValue = “xx”);修改 TestController1 類程式碼如下:
package cn.hh.test02.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("testc1") public class TestController1 { @RequestMapping("login") public ModelAndView login(@RequestParam(defaultValue = "張三") String sName, @RequestParam(defaultValue = "20") int sAge, @RequestParam(defaultValue = "88.8") double sScore ){ ModelAndView mv = new ModelAndView(); mv.setViewName("test1/show"); mv.addObject("currentShow",sName+"年齡:"+sAge+",分數:"+sScore); return mv; } }
修改後的執行效果如下:
使用基本型別的包裝類,實現引數接收,避免使用基本型別接收引數時,將null值賦予基本型別變數丟擲異常的問題。之前基本資料型別會報500錯誤,包裝資料型別不會報錯。
@RequestMapping("login") public ModelAndView login(String sName, Integer sAge, Double sScore ){ ModelAndView mv = new ModelAndView(); mv.setViewName("test1/show"); mv.addObject("currentShow",sName+"年齡:"+sAge+",分數:"+sScore); return mv; }
當不賦值時的執行效果如下,不會報500錯誤。
@RequestParam()有三個屬性:
接收陣列引數的關鍵點有兩個:
專案案例: 頁面有多個興趣愛好供選擇,選擇好後,控制檯能顯示出來。
關鍵步驟:
【1】在 cn.hh.test02.controller 目錄下新增 TestController2 類,程式碼如下:
package cn.hh.test02.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("testc2") public class TestController2 { @RequestMapping("interest") public String interest(String[] myInterest){ System.out.println("我的興趣愛好有:"); for (String s : myInterest) { System.out.println("interest = " + s); } return "test1/interest"; } }
【2】在 src/main/webapp/test1 目錄下新建 interest.jsp,程式碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 我的興趣愛好<br/> <form action="../testc2/interest"> 攝影:<input type="checkbox" name="myInterest" value="攝影"/><br/> 跳舞:<input type="checkbox" name="myInterest" value="跳舞"/><br/> 旅遊:<input type="checkbox" name="myInterest" value="旅遊"/><br/> 閱讀:<input type="checkbox" name="myInterest" value="閱讀"/><br/> <input type="submit" value="確定"/> </form> <br/>觀測控制檯的輸出 </body> </html>
【3】執行測試:
確定興趣愛好,觀察控制檯,控制檯列印如下:
方法 Delete5(User user) 可只用一個實體類作形式引數,前提是這個實體類的各個屬性要與前臺表單穿過來的各個 name 屬性值相同。
關鍵步驟:
【1】建立實體類 User 類,程式碼如下:
package cn.kgc.springmvc02.entity; import lombok.Data; @Data public class User { private String uName; private Integer uAge; }
【2】在 cn/kgc/springmvc02/controller 目錄下,新建 ParamController 類,程式碼如下:
package cn.kgc.springmvc02.controller; import cn.kgc.springmvc02.entity.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("param") public class ParamController { @RequestMapping("delete") public String Delete5(User user) { System.out.println("user = " + user); return "show"; } }
【3】在 src/main/webapp 目錄下建立 show.jsp,程式碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>刪除成功!</h1> </body> </html>
【4】頁面展示效果
【5】控制檯列印效果
什麼是REST風格:把請求引數變為請求路徑的一種程式設計風格。 通過路徑變數的使用,可以實現REST風格的程式設計。
傳統的程式設計風格中,某項事物列表Web頁面,要想一個個編輯,需要每一項中有類似這種超連結:
/restfuls?id=1
其中每一項的id不同。而採用RESTful風格後,超連結將變成:
/ restfuls/1 或者 1/restfuls 意義一樣。
restful風格 | 請求方式 | 說明 |
---|---|---|
/users | get | 查詢全部列表資料 |
/users/1 | get | 根據 id 查詢一條資料 |
/users/1 | delete | 根據 id 刪除一條資料 |
/users | post | 新增資料,引數以json格式進行傳遞 |
/users | put | 修改資料 |
@PathVariable 對映 URL 繫結的預留位置:
通過 @PathVariable 可以將 URL 中預留位置引數繫結到控制器處理方法的入參中:URL 中的 {xxx} 預留位置可以通過
@PathVariable(“xxx”) 繫結到操作方法的入參中。
一般與 @RequestMapping(“xxx”) 一起使用
專案程式碼:
package cn.kgc.springmvc02.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("restfuls") public class RestfulController { //1、列表查詢 @GetMapping public String getList(){ System.out.println("列表資料展示"); return "show"; } //2、查詢一個 @GetMapping("{id}") public String getDataById(@PathVariable Integer id){ System.out.println("查詢id = " + id); return "show"; } //3、根據 id 刪除一條資料 @DeleteMapping("{id}") public String deleteById(@PathVariable Integer id){ System.out.println("刪除id = " + id); return "show"; } //4、新增資料 @PostMapping public String addData(){ return "show"; } //5、修改資料 @PutMapping("{id}") public String updateData(@PathVariable Integer id){ System.out.println("修改id = " + id); return "show"; } }
執行測試:
【1】列表查詢(請求地址:/restfuls;請求方式:GET)
控制檯列印:
【2】查詢一個(請求地址:/restfuls/1;請求方式:GET)
控制檯列印:
【3】根據 id 刪除一條資料(請求地址:/restfuls/1;請求方式:DELETE)
控制檯列印:
【4】新增資料(請求地址:/restfuls;請求方式:POST)
控制檯列印:
【5】修改資料(請求地址:/restfuls/1;請求方式:PUT)
控制檯列印:
對於上面案例所請求的引數,若含有中文,可能會出現中文亂碼問題,SpringMVC 對於請求引數中的中文亂碼問題,提供了專門的字元集過濾器,只需要在web.xml組態檔中註冊字串過濾器即可解決中文亂碼問題。上面專案若要解決亂碼問題,只需在 web.xml 中新增如下設定即即可:
<!--註冊字元集過濾器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <!--指定字元集--> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <!--強制使用指定字元集--> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
有時候我們使用 ModelAndView 新增模型資料的時候,頁面用${ } 獲取不到相應的值,也面效果如下:
造成這個問題的原因是專案中的 web.xml 檔案內容有問題,先看看未修改前的頭部內容:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name>
修改後的web.xml內容:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Archetype Created Web Application</display-name>
修改之後,便可以解決這個問題!
到此這篇關於SpringMVC 引數繫結(檢視傳參到控制器)的文章就介紹到這了,更多相關SpringMVC 引數繫結內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45