1.1 需求
将页面修改后的商品信息保存到数据库中。
1.2 需求分析
请求的url:/updateitem.action
参数:表单中的数据
响应内容:更新成功页面
1.3 接收表单数据
1.3.1 使用基本数据类型接收表单数据
springmvc可以直接接收基本数据类型,包括string。springmvc可以帮你在传参时自动进行类型转换。
转换的前提:controller方法接收的参数名称必须等于页面上input框的name属性名。
1.3.1.1 在spring的业务层的ItemService接口中添加通过id进行更新数据库的方法。
public void update(Items items);
1.3.1.2 在ItemServiceImpl实现类中定义public void update(Items items)方法
@Override public void update(Items items) { // //按照主键id进行修改 //使用WithBLOBs作用是最整个文本进行修改 itemsMapper.updateByPrimaryKeyWithBLOBs(items); }
1.3.1.3 在控制层的ItemsController中定义更新方法
在控制层的ItemsController中定义根据接收的参数调用业务层的更新方法,实现将数据更新到数据库中。
/* * springmvc可以直接接受基本数据类型,包括string,springmvc可以帮你在传参时自动进行 * 类型转换 * 转换的前提:controller方法接受的参数名称必须等于 * 页面上input框的name属性名 */ @RequestMapping("/updateitem") public String update(Integer id,String name,float price,Date createtime,String detail){ System.out.println(id); System.out.println(createtime); Items items=new Items(); items.setId(id); items.setName(name); items.setPrice(price); items.setDetail(detail); //items.setCreatetime(new Date()); items.setCreatetime(createtime); //调用业务层对相关 itemService.update(items); return "success"; }
处理完成后,跳转到success页面。
在这里我们的数据库表中有一个creaetime的字段,它的类型是Date类型。而我们从页面获取到的参数都是Sring类型的,对于基本的数据类型springmvc可以给我们自动进行类型转换,而由String类型转换为Date类型,不能自动完成,所以需要我们手动进行类型准换。
(1)创建转换类CustomGlobalStrToDateConverter:
package com.huida.controller.convert; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; //全局的转换器 public class CustomGlobalStrToDateConverter implements Converter<String, Date>{ //将页面传过来的字符串转换为Date类型 @Override public Date convert(String str) { Date date=null; //定义日期的格式器 try { date=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return date; } }
(2)对转换器进行全局配置
因为转换器是控制层要进行的操作,所以我们需要将配置配置到SpringMvc.xml中。
<!-- 转换器配置 注意:一定要将自定义的转换器配置到注解驱动上 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.huida.controller.convert.CustomGlobalStrToDateConverter"/> </set> </property> </bean>
需要注意的是:一定要将自定义的转换器配置到注解驱动上。
<!-- 加载注解驱动 --> <mvc:annotation-driven conversion-service="conversionService"/>
1.3.2 使用pojo接收表单数据
如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使用pojo接收数据。
注意:要求pojo对象中的属性名和表单中input的nama属性一致。
页面定义如下:
<table width="100%" border=1> <tr> <td>商品名称</td> <td><input type="text" name="name" value="${item.name }" /></td> </tr> <tr> <td>商品价格</td> <td><input type="text" name="price" value="${item.price }" /></td> </tr> <tr> <td>商品生产日期</td> <td><input type="text" name="createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>" /></td> </tr> <tr> <td>商品简介</td> <td><textarea rows="3" cols="30" name="detail">${item.detail }</textarea> </td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交" /> </td> </tr> </table>
pojo定义:
请求的参数名称和pojo的属性名称一致,会自动将请求参数辅助给pojo的属性。
ItemsController的更新方法为:
@RequestMapping("/updateitem") public String update(Items items){ //springmvc可以接受pojo类型,但是要求页面上input框的name属性必须等于pojo的属性名称 itemService.update(items); return "success"; }
注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要使用1.3.1中提到的数据类型转换,并且进行全局配置。