spring中controller与jsp之间的那些事儿

您所在的位置:网站首页 jsp页面请求和接收数据异常怎么解决 spring中controller与jsp之间的那些事儿

spring中controller与jsp之间的那些事儿

2024-07-14 07:31:11| 来源: 网络整理| 查看: 265

本文是我在学习Java EE过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习。

Spring MVC数据绑定和响应 前言一、简单数据绑定1.1、默认数据绑定1.2、简单数据类型绑定1.3、POJO绑定 二、复杂数据绑定2.1、数组的绑定2.2、集合绑定2.3、复杂POJO绑定2.3.1、属性为对象类型的数据绑定(传递的是一个类的一个对象)2.3.2、属性为List类型的数据绑定(传递的是一个类的多个对象)2.3.3、属性为Map类型的数据绑定(即键值对,可绑多个不同类型的值)

前言

今天主要学习的是关于spring中在jsp页面与controller层之间传参的事儿,根据在jsp页面中传过来的数据的不同在controller中所使用的返回值也有所不同。

一、简单数据绑定 1.1、默认数据绑定 HttpServletRequest:获取请求信息 HttpServletResponse:处理响应信息

在controller中一般这样写来接受参数,将参数封装在HttpServletRequest对象request中。

controller类:

@RequestMapping(value="json.do") protected void json(HttpServletRequest request){ //获取值 String useid=request.getparameter("userid"); System.out.println("userid="+userid); } 1.2、简单数据类型绑定

简单数据类型绑定就是指Java中基本类型的数据绑定。

在SpringMVC进行简单数据类型的绑定只需要客户端请求的参数的名称与处理器的形参名称一致即可,请求参数会自动映射并匹配到处理器的形参完成数据绑定。

controller类:

@RequestMapping(value="add.do") protected ModelAndView orderadd(String sno){ //获取值 Map model=new HashMap(); model.put("sno",sno); ModelAndView md=new ModelAndView("WEB-INF/view/addstudent.jsp",model); return md; }

上面的orderadd的形参sno要和jsp页面表单中的元素的name值要一样(这里传的是单选框radio的值,所以单选框的name也为sno)。

1.3、POJO绑定

jsp页面:

package com.mvc.entity; public class Student { String sno; String sname; String sex; String sbirthday; String sclass; public Student() {} public Student(String sno,String sname,String sex,String sbirthday,String sclass) { this.sno=sno; this.sname=sname; this.sex=sex; this.sbirthday=sbirthday; this.sclass=sclass; } public String toString() { return sno+" "+sname+" "+sex+" "+sbirthday+" "+sclass; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getSbirthday() { return sbirthday; } public void setSbirthday(String sbirthday) { this.sbirthday = sbirthday; } public String getSclass() { return sclass; } public void setSclass(String sclass) { this.sclass = sclass; } }

controller类:

@RequestMapping(value="pojo.do") protected String pojo(Student s) { service.addstudent(s); return "redirect:studentlist.do"; }

student.java:

学生信息 添加学生信息 学号: 姓名: 性别: 出生日期: 班级: 添加

这种方法其实就是将jsp页面中要传的多个不同类型的参数封装到student类中(换种说法就是用Student类来接收参数)当然重点是:jsp页面的元素名称name值要和student类里定义的属性名要一模一样,然后在controller中的参数就时student类的对象,该对象具有你要从jsp页面要传的所有数据。这样客户端发送请求时,请求数据会自动绑定到处理器形参POJO对象(Student s)中。

二、复杂数据绑定

实际开发中我们经常会遇到一些比较复杂的数据绑定,例如数组的绑定,集合的绑定,复杂POJO的绑定和json数据的绑定。

2.1、数组的绑定

实际应用中我们会遇到客户端请求需要传递多个同名参数到服务器的情况,这时我们可以使用数组来接受客户端的请求参数,完成数据绑定。

controller类: 参数为String[ ] 数组类型的cid

@RequestMapping(value="delcourse.do") protected String deletecourse(String[] cid) { //获取值 service.delcourse(cid); return "redirect:courselist.do"; }

jsp页面: 多选框checkbox的name为cid

Insert title here function delcourse(){ //获取表单 thisForm= document.forms[0]; //动态修改action属性 thisForm.action="delcourse.do"; } 选择 课程号 课程名称 学分 授课教师 ${c.cno} ${c.cname} ${c.credit} ${c.tno} 添加 删除

客户端请求的参数名称要和controller中方法形参要一样。

2.2、集合绑定

除了使用数组来绑定多个同名的请求参数,还可以使用集合进行多参数的绑定。集合中存储简单数据类型时,数据的绑定规则与数组的绑定规则相似,客户端请求的参数名称要和controller中方法形参要一样。不同的是,使用集合绑定时,处理器的形参名称要使用@RequestParam注解标注。

controller类: @RequestParam(“cid”)中的表单元素名(cid为checkbox的name名)要和形参名一样。

@RequestMapping(value="delcourse.do") protected String deletecourse(@RequestParam("cid") List cid) { //获取值 service.delcourse(cid); return "redirect:courselist.do"; } 2.3、复杂POJO绑定

所谓的复杂POJO,就是POJO属性的类型不仅仅包含简单数据类型,还包括对象类型,List类型和Map类型等其他引用类型。

2.3.1、属性为对象类型的数据绑定(传递的是一个类的一个对象)

order类:

public class order { String orderId; }

customer类: 这个类里面有一个Order类的属性order

public class customer { private Order order; private String username; private String password;

controller类:

@RequestMapping(value="findorder.do") protected void json1(Customer c) { String username=c.getUsername(); string orderId=c.getOrder().getOrderId(); System.out.println("username="+username+"orderId="+orderId); }

jsp页面: 所属用户是传给customer类的username,所有name也为username,而订单编号是传给customer类里的order类的orderId属性,所有它的name要和order类里的orderId一模一样,因此name为order.orderId,即要与最底层的你要传的属性name一模一样。

所属用户: 订单编号: 查询 2.3.2、属性为List类型的数据绑定(传递的是一个类的多个对象)

order类:

public class order { String orderId; }

customer类: 这个类里面有一个List类的属性order

public class customer { private List orders; private List address; private String username; private String password;

controller类:

@RequestMapping(value="findorder.do") protected void json1(Customer c) { String username=c.getUsername(); List orderIds=c.getOrder().getOrderId(); System.out.println("username="+username+"orderId="+orderId); }

jsp页面: 这里的jsp页面和上面的form表单元素的name命名规则一样,要与最底层的属性名一样,即order中的属性。但是此处需要传的是多个order类的对象,即多几个order类的属性。例如多个order类的orderId。

①如果List的泛型为简单类型,则客户端参数名称必须和与POJO类中List属性所属类中的属性名称保持一致。例如表单提交时,name为address的元素的数据将绑定到customer类的address属性中。 ②如果List的泛型参数为对象类型,则客户端参数名称必须与POJO类层次结构名称保持一致,并使用数组格式描述对象在List 中的位置,即客户端参数名称必须与最终绑定在List中的某个对象的某个属性的名称保持一致(即为我上面所讲的要和最底层的类的属性名名称一致)。

2.3.3、属性为Map类型的数据绑定(即键值对,可绑多个不同类型的值)

除了使用对象类型、List类型绑定多个数据外,还可以使用Map数据类型来完成多个参数的数据绑定。

order类: Product是一个类,类里有proId ,proname两个属性

public class order { String orderId; HashMap productInfo; }

controller类:

@RequestMapping(value="orderInfo.do") protected void getOrderInfo(Order order) { //获取数据 String orderId=order.getOrderId(); HashMap orderInfo=order.getOrderInfo(); Set keys=orderInfo.keySet(); //输出数据 System.out.println("订单Id"+orderId); System.out.println("订单商品信息:"); for(String key:keys){ //此处获取的是相应的key的value Product product=orderInfo.get(key); String proId=product.getProId(); String proName=product.getProName(); System.out.println(key+"类~"+"商品id:"+proId+",商品名称:"proName); } }

jsp页面:

订单id: 商品Id 商品名称

在对复杂POJO数据进行绑定时,如果数据绑定到Map类型的属性,客户端请求的参数名称(form表单元素名称)必须与POJO类的层次结构保持一致,并使用键值的映射格式描述对象在Map中位置,即客户端参数名称必须要与要绑定的Map中的具体对象的具体属性的名称保持一致,例如表上述单提交时,name为productInfo['生鲜'].proId的元素数据将被绑定到order类productInfo集合中键为“生鲜”的对象的属性中,且属性名称为proId



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭