SpringMVC-参数绑定
来源:互联网 发布:北京入职体检费用 知乎 编辑:程序博客网 时间:2024/06/09 21:11
在之前我们通过实例简单讲解过jsp页面到后台Controller的传值,其实也就是SpringMVC的出纳书绑定,今天我们对SpringMVC的几种常用参数绑定做一下介绍。
参数绑定在我们的开发中是很常用也很重要的东西,在开发中我们经常需要进行一些参数的传递,这就需要用到SpringMVC的参数绑定,参数绑定主要有简单java类型参数绑定。pojo类型、集合类型参数绑定几种,我们一一做介绍。
简单类型参数绑定
SpringMVC支持简单数据类型的参数绑定,即可将简单类型作为Controller的参数将数据进行传递,如下:
//通过@RequestParam接收request传递过来的参数@RequestMapping(value="/editDatas",method={RequestMethod.POST,RequestMethod.GET})public String editDatas(Model model,@RequestParam(value="num",required=true)Integer num)throws Exception{//根据num查询数据信息DataCustom dataCustom = (DataCustom) dataService.findDataByNum(num);//通过形参中的model将数据传送到页面model.addAttribute("dataCustom", dataCustom);return "/data/editDatas";}
在上面的代码中,我们将num作为参数传递给了controller,在这里我们使用@RequestParam进行了指定,如果jsp页面与参数名称一致,则不需要此项指定,直接将参数放入即可,如果参数名称不一致,则需要我们使用注解进行指定方可解析。
@RequestParam:
使用@RequestParam常用于处理简单类型的绑定。
value:参数名字,即入参的请求参数名字,如value="num"表示请求的参数区中的名字为item_id的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误;
在上面的代码中形参名称为num,这里使用value="num"限定请求的参数名为num,所以页面传递参数的名必须为num。
注意:如果请求参数中没有num将报异常:
HTTP Status 500 - Required Integerparameter 'item_id' is not present
这里通过required="true"限定num参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值
pojo类型参数绑定
简单pojo参数绑定
简单的pojo参数绑定顾名思义,就是简单的一个pojo对象,并没有进行相关的包装,在开发中将pojo对象中的属性名与传递进来的属性名对应,
如果传进来的参数名称和对象中的属性名称一致则将参数值设置在pojo对象中。
例如,我们需要将jsp页面的数据提交,通过controller进行相关操作。
页面代码如下:
<input type="text" name="temp"/><input type="text" name="hum"/>
如上代码所示,jsp页面提交了两个值,分别为temp与hum,我们在后台将其封装在pojo对象中(Data),那么在Controller中我们就可以将pojo当做参数进行数据的接收。
如下:
@RequestMapping("/editDataSubmit")public String editItemSubmit(Data data)throws Exception{System.out.println(data);}
如上代码所示,将pojo对象当做参数传递,当请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性。
包装pojo参数绑定
在开发中,往往一个简单的pojo对象并不能满足我们的需求,我们需要对齐进行包装,封装众多的条件以及pojo类。在SpringMVC中,其实简单的pojo参数绑定与简单pojo的参数绑定并没有太大区别。如下为包装对象:
Public class QueryVo { private Data data;}在包装对象中,将简单pojo作为一个变量在包装对象中进行引用,可对简单pojo进行相关的同等操作。
在jsp页面中请求如下:
<input type="text" name="data.temp" /><input type="text" name="data.hum" />
如上代码所示,在页面请求中通过pojo得到将值进行传递,在Controller中,我们则通过包装对象来获取其值:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{}
自定义参数绑定
在开发中,有的类型SpringMVC是并不支持的,比如Date类型,我们需要自己进行转换,在请求时,仅仅只是一个String,我们需要将其转换为相应格式的日期类型。
需要开发相应的转换类,如下:
public class CustomDateConverter implements Converter<String, Date> {@Overridepublic Date convert(String source) {try {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return simpleDateFormat.parse(source);} catch (Exception e) {e.printStackTrace();}return null;}}
接下来需要在springmvc.xml中进行转换器的配置:
<!-- 自定义参数绑定 --><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!-- 转换器 --><property name="converters"><list><!-- 日期类型转换 --><bean class="com.sw.ssm.controller.converter.CustomDateConverter"/></list></property> </bean>
我们还学在适配器以及映射器中进行引用:
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
如上,我们的自定义参数绑定就完成了。其实在实际开发中,我们需要进行自定义参数转换的地方并不多,但是对于日期类型的转换我们还是必须要掌握的。
集合类型参数绑定
在开发中,很多时候我们也会用到集合类型的参数绑定,例如我们需要查询多个记录(传入多个id,通过id查询),或者我们需要在页面提交多条数据,所以这时候就需要我们用到集合类型的参数绑定。
字符串数组
在页面中,通过复选框选择多条数据,将数据id传递到Conyroller进行处理,Jsp页面如下:
<input type="checkbox" name="id" value="1"/><input type="checkbox" name="id" value="2"/><input type="checkbox" name="id" value="3"/>
页面通过请求将数据传送到后台进行处理,传送到后台以后,其数据格式为1,2,3
在Controller中我们就可以通过字符串数组String[]进行数据的接收,如下:
public String deleteitem(String[] id)throws Exception{System.out.println(id);}
List类型
在SpringMVC中,我们可以通过List传送数据,在Jsp页面封装后通过请求传送至Controller,例如将需要提交的多条数据封装为一个List。
首先我们需要将List封装在pojo的List封装在对象中,如下所示:
Public class QueryVo {Private List<Data> dataList;//数据列表 /*get/set方法*/}
页面编写如下所示:
<c:forEach items="${dataList }" var="data" varStatus="s"><tr><td><input type="text" name="dataList[${s.index }].name" value="${data.tempo }"/></td><td><input type="text" name="dataList[${s.index }].price" value="${data.hum }"/></td></tr></c:forEach>
如上所示,页面通过List将多条数据提交。
在Controller中,通过包装类即可获取到List:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{ System.out.println(queryVo.getDataList());}
Map类型
在包装类中定义Map对象,并添加get/set方法,action(Controller)使用包装对象接收。
包装类中定义Map对象如下:
Public class QueryVo {private Map<String, Object> dataInfo = new HashMap<String, Object>(); /*get/set方法..*/}
页面则编写如下:
<tr><td>数据信息:</td><td>Temp:<inputtype="text"name="dataInfo['temp']"/>Hum:<inputtype="text"name="dataInfo['hum']"/></td></tr>
如上代码所示,dataInfo即为定义的Map,而temp、hum则为map的key,进而对数据进行提交。
- springmvc参数绑定-pojo绑定
- springmvc参数绑定-复杂绑定
- springMVC请求参数绑定
- springmvc 的参数绑定
- SpringMVC参数绑定
- springmvc参数绑定
- SpringMVC参数绑定注解
- springmvc参数绑定
- SpringMVC 参数绑定
- SpringMVC参数绑定注解
- SpringMVC自定义参数绑定
- SpringMVC参数绑定高级
- SpringMVC参数绑定过程
- springmvc中的参数绑定
- springMVC参数绑定注解
- SpringMVC参数绑定
- springMVC---参数绑定
- springmvc参数绑定
- zabbix configure: error: Invalid Net-SNMP directory
- CxImage类型与Mat类互转
- Oracle正则表达式使用介绍
- AsyncTask源码见解
- untrunc 视频恢复工具
- SpringMVC-参数绑定
- 查看mysql语句运行时间
- MicroZed Chronicles
- js 通过URL Protocol实现网页调用本地应用程序exe或者bat
- springmvc的参数绑定和类型转换(东西不是我写的,为了方便记一下)
- Java IO学习笔记一
- 部署阿里云lnmt框架
- redis 学习笔记三(队列功能)
- ReactiveCocoa+MVVM实践篇