这篇文章整合了SpringMVC和MyBatis:

https://www.cnblogs.com/xuyiqing/p/9419144.html

接下来看看参数绑定:

默认Conrtroller可以绑定四种参数:HttpServletRequest,HttpServletResponse,HttpSession,Model

案例:利用request取出传递的参数

    //获取参数
@RequestMapping(value = "/itemEdit.action")
public ModelAndView toEdit(HttpServletRequest request, HttpServletResponse response, HttpSession session,Model model) {
//Servlet方式
String id = request.getParameter("id"); Items items = itemService.selectItemsById(Integer.parseInt(id)); ModelAndView mav = new ModelAndView();
mav.addObject("item", items);
mav.setViewName("editItem");
return mav;
}

然而,其实可以不需要这样取出参数:可以直接绑定:

    // 获取参数
@RequestMapping(value = "/itemEdit.action")
public ModelAndView toEdit(Integer id, HttpServletRequest request, HttpServletResponse response,
HttpSession session, Model model) { Items items = itemService.selectItemsById(id);
ModelAndView mav = new ModelAndView();
mav.addObject("item", items);
mav.setViewName("editItem");
return mav;
}

这种简单参数绑定其实还可以用@RequestParam来做:

如果传递的参数是id,而我们非要使用ID来接收,就需要这个注解:

(required默认为true,意味着如果传递参数为空,将会报错)

    // 获取参数
@RequestMapping(value = "/itemEdit.action")
public ModelAndView toEdit(@RequestParam(value = "id", required = false, defaultValue = "1") Integer ID,
HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) { Items items = itemService.selectItemsById(ID);
ModelAndView mav = new ModelAndView();
mav.addObject("item", items);
mav.setViewName("editItem");
return mav;
}

然而如果传递的参数是一个对象(POJO类)?

场景:用户写完博客,设置好分类等信息后,将要发布,设置后传递的参数就是POJO类(博客POJO)

使用限制:传递表单各项的name属性的名字必须和POJO类的属性名一致

很简单,直接绑定即可:注意使用限制:

    @RequestMapping(value = "/updateitem.action")
public ModelAndView updateitem(Items items) { itemService.updateItemsById(items); ModelAndView mav = new ModelAndView();
mav.setViewName("success");
return mav;
}

另外,就写博客这个场景,会出现中文乱码问题,这里顺便解决了:

web.xml中配置filter过滤器:

    <!-- 处理POST提交乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

接下来,绑定包装POJO类:

简单的包装类包装商品:

package org.dreamtech.springmvc.pojo;

public class QueryVo {

    //商品
private Items items; public Items getItems() {
return items;
} public void setItems(Items items) {
this.items = items;
} }

绑定包装类:

其实和绑定POJO类相同,不过注意提交表单各项的name属性必须是item.属性名

    @RequestMapping(value = "/updateitem.action")
public ModelAndView updateitem(QueryVo vo) { itemService.updateItemsById(vo.getItems()); ModelAndView mav = new ModelAndView();
mav.setViewName("success");
return mav;
}

场景:传递商品时候,可以修改生产日期,而日期的格式未必规范,于是SpringMVC适配器无法辨认

比如我们这里商品POJO类有一个时间属性类型是Date,而表单传过来的一定是String,于是我们想到能否转换?

自定义转换:

首先需要在springmvc配置文件中配置:

    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean" />

    <!-- 配置Conveter转换器 转换工厂 -->
<bean id="conversionServiceFactoryBean"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 配置 多个转换器 -->
<property name="converters">
<list>
<bean class="org.dreamtech.springmvc.conversion.DateConveter" />
</list>
</property>
</bean>

DateConveter类:输入String类型数据,返回Date类型数据

package org.dreamtech.springmvc.conversion;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.springframework.core.convert.converter.Converter; public class DateConveter implements Converter<String, Date>{ public Date convert(String source) { try {
if(null != source){
//转换2018-8-5 11:14:15
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.parse(source);
}
} catch (Exception e) { }
return null;
} }

参数绑定数组:

场景:商品页面选定多个商品点击删除按钮,后端接收数组(商品ID)

    @RequestMapping(value = "/deletes.action")
public ModelAndView deletes(Integer[] ids) { itemService.delete(ids); ModelAndView mav = new ModelAndView();
mav.setViewName("success");
return mav;
}

这时候只需要前端的表单checkbox的name是ids,各项的value分别是item.id即可

参数绑定List:

和数组应用场景一致:

前端代码需要写成示例这样:

<c:forEach items="${itemList}" var="item" varStatus="s">
<tr>
<td><input type="checkbox" name="ids" value="${item.id }"></td>
<td><input type="text" name="itemsList[${s.index}].name" value="${item.name }"></td>
<td><input type="text" name="itemsList[${s.index }].price" value="${item.price }"></td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td> </tr>
</c:forEach>

绑定List需要写成上边提到的包装类方式:不能直接绑定在参数上

    public ModelAndView updateitem(QueryVo vo) {
//service... ModelAndView mav = new ModelAndView();
mav.setViewName("success");
return mav;
}

只需要QueryVo类有一个List且名为itemList

    private List<Items> itemsList;

    public List<Items> getItemsList() {
return itemsList;
} public void setItemsList(List<Items> itemsList) {
this.itemsList = itemsList;
}

SpringMVC框架三:参数绑定的更多相关文章

  1. <SpringMvc>入门三 参数绑定

    1.get请求 <%--请求参数的绑定--%> <%--get请求参数--%> <a href="/param/testParam1?username=tom& ...

  2. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  3. SpringMVC介绍及参数绑定

    本节内容: SpringMVC介绍 入门程序 SpringMVC架构 SpringMVC整合MyBatis 参数绑定 SpringMVC和Struts2的区别 一.SpringMVC介绍 1. 什么是 ...

  4. [Spring MVC] - SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  5. SpringMVC的各种参数绑定方式

    1. 基本数据类型(以int为例,其他类似):2. 包装类型(以Integer为例,其他类似):3. 自定义对象类型:4. 自定义复合对象类型:5. List绑定:6. Set绑定:7. Map绑定: ...

  6. SpringMVC详解------参数绑定

    SpringMVC详解------参数绑定  转载于:https://blog.csdn.net/swebin/article/details/92795422 目录 1.SpringMVC 参数绑定 ...

  7. springmvc的初始化参数绑定

    一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时  重要的是参数类型 -------------------单日期的绑定 二. 配 ...

  8. [转载]SpringMVC的Model参数绑定方式

    SpringMVC的各种参数绑定方式 http://www.cnblogs.com/HD/p/4107674.html springMVC中复杂嵌套对象.List等集合类型数据绑定 http://ww ...

  9. SpringMVC中的参数绑定总结

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  10. 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

随机推荐

  1. 微信小程序覆盖自定义组件样式

    小程序官方文档明确指出,引入的第三方自定义组件,是不可以对其进行CSS样式覆盖的,但是我们还想要修改怎么办呢?自定义组件时会之定义个外部类,通过这个外部类来修改样式. 修改https://weapp. ...

  2. Unity3D-RayMarch-几何图元-3添加阴影

    效果图: 在RayMarch渲染算法中计算阴影非常简单,当射线碰撞到物体,从碰撞点逆着光源方向再次执行射线步进算法,如果这一过程中碰撞到了其他物体,则碰撞点被其他物体遮挡,该处具有阴影. shader ...

  3. txt 修改

    [61TECH_HEIBAILIUYI]#gaIcldGcyd7ducFc3deaRaOdAd4dPdMdaenc1chaeedeGcfcfeyd1cedhbidIcXcIdBdbdvdfcvbjdr ...

  4. jieba库词频统计

    一.jieba 库简介 (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组:除此之外,jieba 库还提供了增加自定义中文 ...

  5. pycharm:terminal中显示乱码的解决方式

    pycharm:terminal中显示乱码的解决方式

  6. 微信小程序开发之搞懂flex布局1——Flexbox

    Flexbox ——弹性布局 Flexbox is a layout model for displaying items in a single dimension — as a row or as ...

  7. 20155312 张竞予 Exp7 网络欺诈防范

    Exp7 网络欺诈防范 目录 基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 (2)在日常生活工作中如何防范以上两攻击方法 实验总结与体会 实践过程记录 (1)简单应用SET工具建 ...

  8. python的文件读写笔记

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  9. SAS 循环与数组

    SAS 循环与数组 SAS提供了循环语句以满足在编程中需要多次执行相同操作的情 况.有时还需要对不同的变量执行相同的操作,此时可定义SAS数组,并通过数组名和下标来引用这些变量. 1 循环 SAS循环 ...

  10. HTML标签有序标签和无序标签

    1.<ul>标签定义无序列表,所谓无序,是指以●.○.▽.▲等开头的,没有顺序的列表项目 1.1  设置无序列表的类型—type             无序列表的默认符号是圆点(● ). ...