SpringMVC(2)——controller方法参数与html表单对应(请求参数的绑定)

controller方法参数与html表单对应

规则

1. 绑定机制

  1. 表单提交的数据都是k=v格式的 username=haha&password=123
  2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的,要求:提交表单的name和参数的名称是相同的

2. 支持的数据类型

  1. 基本数据类型和字符串类型
  2. 实体类型(JavaBean)
  3. 集合数据类型(List、map集合等)
2.1 基本数据类型和字符串类型
  • 提交表单的name和参数的名称是相同的,区分大小写
2.2 实体类型(JavaBean)

提交表单的name和JavaBean中的属性名称需要一致
如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name
给集合属性数据封装

2.3 集合数据类型(List、map集合等)

List:使用list[0],list[1],其中list是固定写法
Map:以Map<String,Entity>为例,前端jsp页面应为map[‘keyName’].entityName,这也是固定写法,必须这么写

0. User实体类

import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class User implements Serializable {
    private static final long serialVersionUID = -292375206744176903L;
    private String username;
    private String password;
    private Integer age;
    private Fun fun;
    private List<Fun> list;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date birthday;

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", fun=" + fun +
                ", list=" + list +
                ", birthday=" + birthday +
                ", map=" + map +
                '}';
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    private Map<String, Fun> map;

    public Map<String, Fun> getMap() {
        return map;
    }

    public void setMap(Map<String, Fun> map) {
        this.map = map;
    }

    public List<Fun> getList() {
        return list;
    }

    public void setList(List<Fun> list) {
        this.list = list;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }


    public String getUsername() {
        return username;
    }

    public Fun getFun() {
        return fun;
    }

    public void setFun(Fun fun) {
        this.fun = fun;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

1. 基本类型+String类型

@RequestMapping(path = "/save1")
    public String save1(String username, String age) {
        System.out.println("save1方法执行了!!!" + username + ":" + age);
        return "suc";
    }

在JSP的form表单元素中不需要做特殊处理,直接映射即可

<h3>请求参数绑定入门</h3>

<form action="/user/save1" method="post">
    姓名:<input type="text" name="username"/><br/>
    年龄:<input type="text" name="age"/><br/>
    <input type="submit" value="提交"/>
</form>

在这里插入图片描述

在这里插入图片描述

2. 实体类对象

@RequestMapping(path = "/save2")
    public String save2(User user) {
        System.out.println("save2方法执行了!!!" + user.toString());
        return "suc";
    }
<h3>请求参数绑定(封装到实体类)</h3>

<form action="/user/save2" method="post">
    姓名:<input type="text" name="username"/><br/>
    年龄:<input type="text" name="age"/><br/>
    <input type="submit" value="提交"/>
</form>

这里的name属性必须与User表的字段名相同,否则会报错

在这里插入图片描述
在这里插入图片描述

3. 实体类对象(包含自定义引用类型)

<form action="/user/save3" method="post">
    姓名:<input type="text" name="username"/><br/>
    年龄:<input type="text" name="age"/><br/>
    f1:<input type="text" name="fun.f1"/><br/>
    <input type="submit" value="提交"/>
</form>

用字段名.字段名的方式传值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4. 实体类对象(包含数组[])

<form action="/user/save4" method="post">
    姓名:<input type="text" name="username"/><br/>
    年龄:<input type="text" name="age"/><br/>
    金额:<input type="text" name="fun.f3"/><br/>
    集合:<input type="text" name="list[0].f1"/><br/>
    集合:<input type="text" name="list[1].f1"/><br/>
    <input type="submit" value="提交"/>
</form>

固定写法,只能用list而不能用arr
在这里插入图片描述
在这里插入图片描述

5. 实体类对象(存在map)

<h3>请求参数绑定(封装到实体类,存在Map集合)</h3>

<form action="/user/save5" method="post">
    姓名:<input type="text" name="username"/><br/>
    年龄:<input type="text" name="age"/><br/>
    金额:<input type="text" name="fun.f2"/><br/>
    map集合---key1对应的Fun对象的f1赋值:
    <input type="text" name="map['key1'].f1"/><br/>
    map集合---key1对应的Fun对象的f2赋值:
    <input type="text" name="map['key1'].f2"/><br/>
    map集合---key2对应的Fun对象的f3赋值:
    <input type="text" name="map['key2'].f3"/><br/>
    <input type="submit" value="提交"/>
</form>

也是固定写法,[]内部写key,外部的.跟value

在这里插入图片描述

在这里插入图片描述

6. 日期类型转换

将前端传过来的时间字符串转化为java的时间类

6.1 使用@DateTimeFormat注解转换

	// 生日
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

6.2 自定义类型转换器

如果想自定义数据类型转换,可以实现Converter的接口

/**
 *  
 
 * 自定义类型转换器 把String转换成Date
 */
public class StringToDate implements Converter<String,Date>{/**
     * 进行类型转换的方法
     * @param s     用户输入的内容
     * @return
     */
    @Override
    public Date convert(String s) {
        // 判断
        if(s == null){
            throw new RuntimeException("请输入内容");
        }
        // 进行转换
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            // 进行转换
            return sdf.parse(s);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }}


注册自定义类型转换器,在springmvc.xml配置文件中编写配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd"><!--配置了内容,启动Tomcat服务器的时候,就会被加载-->
    <!--配置注解扫描-->
    <context:component-scan base-package="com.test" /><!--配置视图解析器,进行页面的跳转-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--跳转的页面的路径-->
        <property name="prefix" value="/WEB-INF/pages/" />
        <!--跳转页面的后缀名称-->
        <property name="suffix" value=".jsp" />
    </bean><!--配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.qcbyjy.demo2.StringToDate" />
            </set>
        </property>
    </bean><!--让映射器、适配器和处理器生效(默认不配置也是可以的)-->
    <mvc:annotation-driven conversion-service="conversionService"/></beans>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/789108.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用“nvm use 版本号“命令无效

使用"nvm use 版本号"命令无效 为什么无效?解决 为什么无效? 解决 将这个nodejs文件夹删除,然后在运行nvm use 版本号,则 node生效.

HIVE启动报错HiveException java.lang.RuntimeException:

启动hive以后 我们输入SQL语句 会产生以下错误 FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient搜索解决办法发现是要开启元数据&#xff1a; hive --service metastore

【Python进阶】继承进阶和私有权限

目录 一、继承进阶 1、方法重写 2、调用父类方法 3、多层继承 二、私有权限 1、私有属性 2、私有方法 面向对象基础&#xff1a;小白也能看懂的Python基础教程&#xff08;8&#xff09;-CSDN博客 一、继承进阶 1、方法重写 当父类的同名方法达不到子类的要求&#x…

Drools开源业务规则引擎(六)- Drools Flow中RuleFlow文件即*.rf文件介绍

文章目录 Drools开源业务规则引擎&#xff08;六&#xff09;- RuleFlow文件即*.rf文件介绍1.\<header>1.1.\<imports>a.标签格式b.属性说明c.示例代码 1.2.\<globals>a.标签格式b.属性说明c.示例代码 1.3.\<functionImports>a.标签格式b.属性说明c.示…

怎么简单快捷的分享文件呢?扫描二维码看文件的制作方法

怎么简单快捷的分享文件呢&#xff1f;想要快速的实现文件分享&#xff0c;那么可以将文件转成二维码之后&#xff0c;通过分享二维码让其他人扫码在手机上查看文件&#xff0c;可以将单个文件或者多个文件生成二维码&#xff0c;扫描点击文件就能够在手机上预览或者下载文件。…

云开发技术的壁纸小程序源码,无需服务期无需域名

1、本款小程序为云开发版本&#xff0c;不需要服务器域名 2、文件内有图文搭建教程&#xff0c;小白也不用担心不会搭建。 3、本程序反应速度极快&#xff0c;拥有用户投稿、积分系统帮助各位老板更多盈利。 4、独家动态壁纸在线下载&#xff0c;给用户更多的选择 5、最新版套图…

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…

智源打造基于Triton的大模型算子库,助力AI芯片软硬件生态建设

2024年大模型进入了新的发展阶段&#xff0c;AI全领域开启了更为迅猛的量变积累。一方面&#xff0c;模型突破了模态的隔离&#xff0c;文本、语音、视觉等各种形式之间产生的丰富的结合&#xff0c;大大增加了模态的多样性&#xff1b;同时&#xff0c;模型参数量从百亿、千亿…

60页论文参考:基于Java+SpringMvc+Vue技术的智慧校园系统设计与实现

详细查看地址&#xff1a; 基于JavaSpringMvcVue技术的智慧校园系统设计与实现-CSDN博客 基于JavaSpringMvcVue技术的智慧校园系统设计与实现 六、论文参考&#xff1a;

Linux初始化新的git仓库

1.在git服务器上找到项目常部署的git地址可以根据其他项目的git地址确认 例如ssh://git192.168.10.100/opt/git/repository.git 用户名&#xff1a;git&#xff08;前面的是用户&#xff09; 服务器地址&#xff1a;192.168.10.100 git仓库路径&#xff1a;/opt/git/ 2.在服务器…

4.2 存储管理

大纲 页式存储必考&#xff0c;段式存储看运气 页式存储 概念

合合信息大模型加速器重磅上线,释放智能文档全新可能

目录 0 写在前面1 高速文档解析引擎&#xff1a;拓宽大模型认知边界2 文本嵌入模型acge&#xff1a;克服大模型感知缺陷3 行业赋能&#xff1a;以百川智能为例总结 0 写在前面 随着人工智能技术的飞速发展&#xff0c;大模型以强大的数字处理能力和深度学习能力&#xff0c;不…

免费插件集-illustrator插件-Ai插件-测量简单路径面积和周长

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行测量路径面积和周长处理。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/878…

【光伏仿真系统】光伏设计的基本步骤

随着全球对可再生能源需求的不断增长&#xff0c;光伏发电作为一种清洁、可再生的能源形式&#xff0c;正日益受到重视。光伏设计是确保光伏系统高效、安全、经济运行的关键环节&#xff0c;它涉及从选址评估到系统安装与维护的全过程。本文将详细介绍光伏设计的基本步骤&#…

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测&#xff1f; 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用&#xff0c;并且也要结合实际情况&#xff…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用&#xff1b; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; …

SpringBoot开发实用篇(三)

一&#xff1a;任务 1&#xff1a;SpringBoot整合Quartz 导入SpringBoot整合quartz的坐标定义具体要执行的任务&#xff0c;继承QuartzJobBean定义工作明细和触发器&#xff0c;并绑定对应关系 2&#xff1a;SpringBoot整合task 开启定时任务功能设置定时执行的任务&#x…

222|一周小精进:关于需求、产品和技术壁垒/Momentum, Consolidation, and Breakout(7.8

<希望能够坚持下来.JPG> 一、上接 《一胜九败&#xff1a;优衣库全球热卖的秘密》15000字浓缩精华评注&#xff01;所以&#xff0c;单独研究了一下“摇粒绒”。 1、从优衣库的摇粒绒开始 摇粒绒又称羊丽绒&#xff0c;是针织面料的一种&#xff0c;由大圆机编织而成&…

迅为RK3588开发板RKNPU2项目实战2SORT目标追踪

1.介绍和视频演示2.在模拟器实现图片的目标追踪3.连板推理和嵌入式部署4.视频目标追踪的实现(python)5.C实现目标追踪性能强--iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代ALoT高端应用芯片&#xff0c;采用8nm LP制程&#xff0c;搭载八核64位CPU&#xff0c…