百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

SpringMVC学习--参数绑定

nanshan 2024-11-24 19:35 31 浏览 0 评论

从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收。

直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。

1、HttpServletRequest

通过request对象获取请求信息。

2、HttpServletResponse

通过response处理响应信息

3、HttpSession

通过session对象得到session中存放的对象

4、Model/ModelMap

model是一个接口,modelMap是一个接口实现。用:将model数据填充到request域。

通过@RequestParam对简单类型的参数进行绑定。如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功,如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,则会报错。

1、简单的POJO

将pojo对象中的属性名于传递进来的属性名对应,如果传进来的参数名称和对象中的属性名称一致则将参数值设置在pojo对象中

2、复杂的POJO

与简单的POJO差不过,只是在页面上将页面属性设置为pojo类型的属性,如:

1 <input type="text" name="items.name" />

对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。将请求日期数据串传成 日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

自定义日期类型绑定:

 1 public class CustomDateConverter implements Converter<String,Date>{
 2 
 3     @Override
 4     public Date convert(String source) {
 5         //将实际的字符串转为date类型
 6         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 7         try {
 8 //转换成功直接返回
 9 return sdf.parse(source);
10         } catch (ParseException e) {
11 // TODO Auto-generated catch block
12  e.printStackTrace;
13         }
14         //转换失败返回null
15         return null;
16     }
17 
18 }

配置方式:springmvc.xml

 1 <mvc:annotation-driven conversion-service="conversionService"/>
 2 <!-- 自定义参数绑定 -->
 3     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 4         <!-- 转换器 -->
 5         <property name="converters">
 6 <list>
 7 <!-- 日期类型转换 -->
 8 <bean class="com.luchao.converter.CustomDateConverter"/>
 9 </list>
10         </property>
11     </bean>

1、数组绑定

如果要批量删除删除,用户在页面选择多个商品,批量删除。

将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。

如下代码:

1 // 批量删除
2     @RequestMapping(value="/deleteItems")
3     public void deleteItems(String[] item_ids) throws Exception {
4         for (String string : item_ids) {
5  System.out.println(string);
6         }
7     }

2、list绑定

通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交)。

页面属性:

<c:forEach items="${itemsList }" var="item" varStatus="status">
<tr>    

    <td><input name="itemsList[${status.index }].name" value="${item.name }"/></td>
    <td><input name="itemsList[${status.index }].price" value="${item.price }"/></td>
    <td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
    <td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td>


</tr>
</c:forEach>

controller中将包装list集合的POJO作为参数。

3、Map绑定

页面属性:

<tr>
<td>学生信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年龄:<inputtype="text"name="itemInfo['price']"/>
</td>
</tr>

controller中将包装Map集合的POJO作为参数。

如果出现乱码问题,需要添加一个拦截器,spring已经帮我们实现,配置如下:web.xml

 1 <filter>
 2         <filter-name>CharacterEncodingFilter</filter-name>
 3         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 4         <init-param>
 5 <param-name>encoding</param-name>
 6 <param-value>utf-8</param-value>
 7         </init-param>
 8     </filter>
 9     <filter-mapping>
10         <filter-name>CharacterEncodingFilter</filter-name>
11         <url-pattern>/*</url-pattern>
12     </filter-mapping>

另外,也可以将tomcat配置文件添加编码与工程编码一致,如下:

1 <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

另外一种方法对参数进行重新编码:

1 String userName = new 
2 String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。最后一种实现比较麻烦。

现在对SpringMVC已经有了一定的认识,比较其与struts2的一些特点可以加强认识。

1、springmvc基于方法开发的,struts2基于类开发的。

springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似service开发。

2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。

3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。

相关推荐

手机看视频卡顿的系统化解决方案(手机看视频特别卡是什么原因)

手机看视频卡顿是日常使用中常见的问题,通常由网络不稳定、设备性能不足、应用设置不当或系统问题导致。以下方案按优先级排序,兼顾操作难度与解决效果,帮助你快速定位并解决卡顿问题。一、网络优化:解决最核心诱...

电子电路硬件测试基础-板级测试工具之示波器(1)

示波器介绍示波器,作为一种电子测试仪器,主要用于对电信号的波形进行测量、显示与分析。它的工作原理是将电信号的瞬时值转化为屏幕上的垂直偏移,并以时间为基准在水平轴上展开,进而生成信号的图形化呈现。借助示...

宽带安装避坑指南:从选套餐到验收全流程注意事项

在网络成为生活必需品的当下,看似简单的宽带安装实则暗藏诸多细节,稍不留意就会踩入隐藏费用、性能虚标等陷阱。掌握以下关键要点,助你轻松避开宽带安装雷区。一、选对运营商与套餐,拒绝隐形消费选择运营商时,不...

噪声分析及小信号测试(噪音中的信号是什么含义)

示波器在大量开关电源或大功率用电器等复杂环境下进行自环测试,容易出现视频中的噪声问题。示波器在进行小信号测试时,我们要考虑地线带来的干扰,一般设置要求是:一、带宽限制打开;二、尽可能短的地线,一般使用...

怀疑房间被装了监控?深度解析检测方法与步骤

在现代社会中,隐私保护日益受到重视。当我们租房、住酒店或身处私人住宅时,如果发现房间内有异常的迹象,如电器无故自动开关、网络速度突然变慢、电费异常增加,或者在某些特定区域总感觉“被注视”,这些都可能是...

如何快速鉴定网线好坏?怎样测网线电阻?

一、快速鉴定网线好坏的3大核心技巧1.外观检测法:5秒看穿网线本质标识验证:正品网线外皮应清晰印有"CAT5e""CAT6"等类别标识,以及米数刻度(如30...

网速慢?教你快速检测网卡速率! #网络测速

网卡是百兆还是千兆?你知道吗?网速慢可能就是因为网卡不够快,今天就来教你如何快速检查网卡。1.打开CMD:首先找到电脑,按下Win+R键,输入cmd,然后按回车,这就打开了命令提示符...

怎么查自己家WiFi多少兆?(苹果手机测wifi网速)

怎么查自己家WiFi多少兆?在数字化生活日益普及的今天,家庭WiFi的速度直接影响着我们上网冲浪、在线学习、视频通话等日常活动的流畅度。了解自家WiFi的带宽通常以兆比特每秒Mbps为...

家里宽带网速不理想?测一下就知道了

家里网络不理想,经常发生卡顿或是网络抖动?可能是家里宽带的影响,这时候不妨实际测试下网速看看,是否符合预期。个人最近经历过两次上网卡顿问题,第一个是上个月回老家,刷剧的时候,发现有加载缓慢的情况,10...

Linux 必备的20个核心知识点(linux内核知识点)

学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...

忆享科技戟星安全实验室|内网隧道技术,你知道几个?

本文约6000字,阅读约需15分钟。0x00前言在实际环境中,会有各种网络设备、防火墙以及入侵检测系统阻止外网与内网的通信,我们构建内网隐蔽通道来突破安全策略的限制,实现对目标机器的控制。当我们在外...

Win10怎么连接linux虚拟机?(win10搭建linux虚拟机)

这个不难,主要是ping一下ip,检查win10系统是否和Linux虚拟机连通,接着开启ssh服务,如果一切正常的话,就可以连接linux虚拟机,这里简单介绍一下实现过程,实验环境win10+vmwa...

如何在CentOS中配置静态IP地址?(centos6.5配置静态ip地址)

静态IP地址是在计算机网络中使用的固定IP地址,与动态分配的IP地址相对。在CentOS中,通过配置网络设置,您可以轻松地为您的系统设置静态IP地址。本文将详细介绍在CentOS中配置静态IP地址的步...

Firewalld的简单使用(firewall direct)

从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptablesFirewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理ke...

Vmware设置静态IP和主机访问(vmware 设置固定ip)

摘要:Vmware设置静态IP和主机访问关键词:Vmware、静态IP、主机访问整体说明最近在做大模型的本地部署,发现之前的Virtualbox,不太能用到本地的英伟达GPU,所以开始使用...

取消回复欢迎 发表评论: