使用springmvc从页面中获取数据,然后根据获得的参数信息进行修改,最后将修改的信息返回给数据库,并显示修改成功

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中提到的数据类型转换,并且进行全局配置。

猜你喜欢

转载自www.cnblogs.com/wyhluckdog/p/10181134.html