SpringMVC框架三:参数绑定
2018-08-06 09:00:29来源:博客园 阅读 ()
这篇文章整合了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; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java--反射(框架设计的灵魂)案例 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- Java--反射(框架设计的灵魂) 2020-06-11
- 与JAVA集合相遇 2020-06-11
- Java框架之Hibernate实战篇 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash