解决SSM框架jsp页面中 input 的datetime-local类型传值到后端数据类型不匹配问题

由于datetime-local插入类型与数据库后端实体类Order中两个date类型字段createTime、endTime不匹配,就会出现日期格式和转换错误。

因为datetime-local插入类型的数据中,包含T,格式如下:

 yyyy-MM-ddTHH:mm:ss

而此时插入数据库后端Date类型数据的时候就会报错(因为T的存在)

因此可以采用以下方法解决:

第一步:修改JSP页面

  由于当input中name的属性值名字与实体pojo中的属性名一致的时候,SSM框架会帮我们自动封装对象。我们可以采取手动封装,所以我们这里的name属性中的属性值不与pojo实体类中的属性名一致

    <%此处只列举核心部分%>
    <td>开单时间:</td>
    <td><input type="datetime-local" step="1" name="cTime"/></td>
    <td>结账时间:</td>
    <td><input type="datetime-local" step="1" name="eTime"/></td>

第二步:修改Conteller

  我们从JSP页面中根据刚才的属性值把内容取出,然后进行字符串截substring(起始位值,结束位置),把“T”去掉,再把年月日时分秒重新合并成新的字符串。接着按照要求把这两个字符串类型的变量转换成Date类型再封装到实体对象中。另外也可以直接用字符串的replaceAll(“要被替换的字符”,“替换成什么”)方法来把T替换成空格。

//此处只列举核心部分 代码不全
@RequestMapping("/addOrder")
public String doInsert(Order order,Model model,String cTime,String eTime) throws ParseException {
        cTime=cTime.substring(0,10)+" "+cTime.substring(11,19);//截取方法
        eTime=eTime.replaceAll("T", " ");//替换方法
        order.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(csTime));
        order.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(eTime));
        /*其余基础操作代码此处略*/
    }

实体类Order相关Date日期类型属性要使用注解 @DateTimeFormat

public class Order {
    private Integer orderId;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    //此处get set 和toString 方法不列举 但要写
    }

 如果input使用date类型就不会出现上述错误,此时name属性的属性值直接与实体类中的属性名对应即可(框架自动封装。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值