返回顶部
首页 > 资讯 > 后端开发 > JAVA >SpringMVC 参数绑定(视图传参到控制器)
  • 893
分享到

SpringMVC 参数绑定(视图传参到控制器)

servletjavaspring 2023-08-23 07:08:36 893人浏览 泡泡鱼
摘要

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SSM 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:springMVC 参数绑定(视图传参到控制器)

在这里插入图片描述

⛳️ 基本类型做形式参数(零散参数的数据接收)

1、基本数据类型

要求前台页面的表单输入框的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>Titletitle>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>Titletitle>head><body><h1>提交成功!${currentShow}h1>body>html>

【4】在浏览器中输入 Http://localhost:8080/testspringmvc02/test1/test1.jsp,如下图:

在这里插入图片描述

添加数据并提交,展示效果如下:

在这里插入图片描述

1.1 表单 name 属性值与方法参数名称不一致解决方案

当表单的 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;    }

1.2 表单 name 属性值为空时解决方案

当表单某个 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;    }}

修改后的运行效果如下:

在这里插入图片描述

2、包装数据类型(推荐使用)

使用基本类型的包装类,实现参数接收,避免使用基本类型接收参数时,将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错误。

在这里插入图片描述

3、@RequestParam() 属性

@RequestParam()有三个属性:

  • value:指定请求参数的名称。
  • required:指定该注解所修饰的参数是否是必须的,boolean 类型。若为 true,则表示请求中所携带的参数中必须包含当前参数。若为false,则表示有没有均可。
  • defaultValue:指定当前参数的默认值。若请求 URI 中没有给出当前参数,则当前方法参数将取该默认值。即使required为true,且URI中没有给出当前参数,该处理器方法参数会自动取该默认值,而不会报错。

⛳️ 数组类型做形式参数

接收数组参数的关键点有两个:

  1. 前台表单有多个表单域的name属性相同;
  2. 控制器方法用这个name值命名的数组作为参数。

项目案例: 页面有多个兴趣爱好供选择,选择好后,控制台能显示出来。

关键步骤:

【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>Titletitle>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】运行测试

在这里插入图片描述

确定兴趣爱好,观察控制台,控制台打印如下:

在这里插入图片描述

⛳️ 实体 Bean 做形式参数

方法 Delete5(User user) 可只用一个实体类作形式参数,前提是这个实体类的各个属性要与前台表单穿过来的各个 name 属性值相同。

关键步骤:

【1】创建实体类 User 类,代码如下:

package cn.kGC.springmvc02.entity;import lombok.Data;@Datapublic 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>Titletitle>head><body>    <h1>删除成功!h1>body>html>

【4】页面展示效果

在这里插入图片描述

【5】控制台打印效果

在这里插入图片描述

⛳️ RESTful 风格编程

什么是REST风格:把请求参数变为请求路径的一种编程风格。 通过路径变量的使用,可以实现REST风格的编程。

传统的编程风格中,某项事物列表Web页面,要想一个个编辑,需要每一项中有类似这种超链接:
/restfuls?id=1
其中每一项的id不同。而采用RESTful风格后,超链接将变成:
/ restfuls/1 或者 1/restfuls 意义一样。

restful风格请求方式说明
/usersget查询全部列表数据
/users/1get根据 id 查询一条数据
/users/1delete根据 id 删除一条数据
/userspost添加数据,参数以JSON格式进行传递
/usersput修改数据

@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)

在这里插入图片描述

控制台打印:

在这里插入图片描述

⛳️ 常见报错

1、中文乱码问题

对于上面案例所请求的参数,若含有中文,可能会出现中文乱码问题,SpringMVC 对于请求参数中的中文乱码问题,提供了专门的字符集过滤器,只需要在web.xml配置文件中注册字符串过滤器即可解决中文乱码问题。上面项目若要解决乱码问题,只需在 web.xml 中添加如下配置即即可:

<filter>        <filter-name>characterEncodingFilterfilter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>        <init-param>            <param-name>encodingparam-name>            <param-value>UTF-8param-value>        init-param>        <init-param>            <param-name>forceEncodingparam-name>            <param-value>trueparam-value>        init-param>    filter>    <filter-mapping>        <filter-name>characterEncodingFilterfilter-name>        <url-pattern>/*url-pattern>    filter-mapping>

2、使用 ModelAndView,页面却获取不到值

有时候我们使用 ModelAndView 添加模型数据的时候,页面用${ } 获取不到相应的值,也面效果如下:

在这里插入图片描述

造成这个问题的原因是项目中的 web.xml 文件内容有问题,先看看未修改前的头部内容:

<web-app>  <display-name>Archetype Created Web Applicationdisplay-name>

修改后的web.xml内容:

<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 Applicationdisplay-name>

修改之后,便可以解决这个问题!


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

来源地址:https://blog.csdn.net/hh867308122/article/details/129255336

--结束END--

本文标题: SpringMVC 参数绑定(视图传参到控制器)

本文链接: https://lsjlt.com/news/378365.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringMVC 参数绑定(视图传参到控制器)
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-23
    servlet java spring
  • SpringMVC参数绑定之视图传参到控制器如何实现
    本篇内容主要讲解“SpringMVC参数绑定之视图传参到控制器如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC参数绑定之视图传参到控制器如何实现”吧!基本类型做形式参数(...
    99+
    2023-07-05
  • SpringMVC参数绑定之视图传参到控制器的实现代码
    目录⛳️ 基本类型做形式参数(零散参数的数据接收)1、基本数据类型1.1 表单 name 属性值与方法参数名称不一致解决方案1.2 表单 name 属性值为空时解决方案2、包装数据类...
    99+
    2023-03-06
    SpringMVC 参数绑定 SpringMVC视图传参到控制器
  • 怎么在SpringMVC中绑定参数
    本篇文章为大家展示了怎么在SpringMVC中绑定参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 简单参数绑定执行HandlerAdapter的handler方法后,进入RequestMap...
    99+
    2023-06-14
  • SpringMVC 参数绑定相关知识总结
    目录1. 简单参数绑定2. 对象参数绑定3. 参数绑定解析总结请求进入DispatcherServlet的doDispatch后,获取HandlerMethod。然后根据Handle...
    99+
    2024-04-02
  • SpringMVC中参数绑定问题实例详解
    目录前言1. 参数绑定的过程2. 默认支持的类型3. 简单类型的绑定4. pojo类型的绑定4.1 普通pojo类型4.2. 包装的pojo类型5. 集合类型的绑定5.1 数组的绑定...
    99+
    2024-04-02
  • SpringMVC中参数绑定问题怎么解决
    这篇文章主要讲解了“SpringMVC中参数绑定问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC中参数绑定问题怎么解决”吧!1. 参数绑定的过程我们可以回忆一下,...
    99+
    2023-06-29
  • 如何将参数从中间件传递到控制器
    php小编百草为您介绍如何将参数从中间件传递到控制器。在开发过程中,我们经常需要在中间件中获取一些参数,然后将这些参数传递给控制器进行后续处理。要实现这个功能,我们可以通过在中间件中使...
    99+
    2024-02-13
  • Yii2 中如何把数据从控制器传递到视图
    Yii2 中如何把数据从控制器传递到视图,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。控制器类中定义数据方式一public&n...
    99+
    2024-04-02
  • SpringMVC传日期参数到后台的示例分析
    小编给大家分享一下SpringMVC传日期参数到后台的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、注解方式,在controller层通过initBi...
    99+
    2023-05-30
    springmvc
  • SpringMVC视图转发重定向区别及控制器详解
    目录SpringMVC视图一、ThymeleafView二、转发视图三、重定向视图四、转发和重定向区别五、视图控制器 view-controllerSpringMVC视图 Sprin...
    99+
    2024-04-02
  • oracle视图传参数的方法有哪些
    在Oracle中,可以使用以下方法传递参数给视图:1. 使用变量:可以在视图定义中使用变量,并在查询时传递参数值。例如:```sql...
    99+
    2023-08-08
    oracle
  • angular中如何实现控制器之间传递参数
    这篇文章将为大家详细讲解有关angular中如何实现控制器之间传递参数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在angular中,每个controller(控制器)...
    99+
    2024-04-02
  • Oracle中数据绑定和参数传递要注意什么
    在Oracle中,数据绑定和参数传递是非常重要的操作,要注意以下几点: 数据绑定是在SQL语句中使用变量来替代固定的数值或字符串...
    99+
    2024-04-09
    Oracle
  • Vue在自定义指令绑定的处理函数中传递参数
    目录在自定义指令绑定的处理函数中传递参数需求背景方式一:包装函数方式二:利用动态参数在自定义指令中的传递参数时value和expression的区别注意点总结在自定义指令绑定的处理函...
    99+
    2023-03-10
    Vue自定义指令 Vue处理函数 Vue传递参数
  • Spring Boot 控制层之参数传递方法详解
    当然,您自己创建一个项目也是可以的。 bean包下的Student.java package com.example.demo.bean; public class Studen...
    99+
    2024-04-02
  • 巧用 Python 函数:从定义到调用,再到参数传递
    函数定义 Python 函数的定义使用 def 关键字,函数名后跟一对圆括号。圆括号中可以包含参数,参数之间用逗号分隔。函数体写在冒号后面,缩进表示函数体。 def greet(name): """ 向某人打招呼。 Arg...
    99+
    2024-02-06
    Python 函数 函数定义 函数调用 参数传递
  • Vue怎么在自定义指令绑定的处理函数中传递参数
    这篇文章主要介绍“Vue怎么在自定义指令绑定的处理函数中传递参数”,在日常操作中,相信很多人在Vue怎么在自定义指令绑定的处理函数中传递参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么在自定义指令...
    99+
    2023-07-05
  • PHP:laravel中间件和控制器的请求参数传递与获取
    目录 1、中间件和控制器测试2、安全隐患3、支持的传参方式4、总结5、一种更为安全的做法 接口开发中,通常我们需要在中间件里边做一些全局性的前置判断,获取请求中的公共参数,然后传递给...
    99+
    2023-09-10
    php laravel 开发语言
  • springboot控制层传递参数为非必填值的操作
    目录springboot控制层传递参数为非必填值Controller层接收参数的形式1.参数存在于请求路径中2.参数在请求体中springboot控制层传递参数为非必填值 需求是查询...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作