SSM笔记-SpringMVC的自定义类型转换器

1、步骤:
①建立对应的bean和dao
②建立form表单
③建立handler(①handler的参数需要更表单控件name值一样 ②要用@RequestParam修饰方法的参数)
④建立converter类,且继承org.springframework.core.convert.converter.Converter
⑤实现org.springframework.core.convert.converter.Converter的方法(添加操作数据需要的逻辑,记得return对应的Bean)
⑥到Spring配置文件中配置conversionService,而且使用ref标签指定转换器类名

2、作用:
配置之后就能对指定的Bean的类型转换起到统一作用,凡是有关该bean的类型转换都会调用对应的类型转换类,这样能简化类型转换方面的代码

3、注意事项:
①bean和dao类都需要使用@Repository修饰
②handler类里面需要用@Autowired修饰dao类
③在springmvc配置文件中配置”conversionService”

4、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>SpringMVC_8_Converter</display-name>
  <servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

5、springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!-- 配置自动扫描包 -->
    <context:component-scan base-package="com.test.springmvc"></context:component-scan>

    <!-- 配置视图解析器,把handler返回值解析为实际视图 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

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

<!--
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
-->
    <bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="infoConverter" />
            </set>
        </property>
    </bean>

</beans>

6、Info.java

package com.test.springmvc.bean;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.stereotype.Repository;

@Repository
public class Info {

    Integer infoId;
    String infoName;
    String infoDesc;
    double infoNumber;
    Date infoDate;

    public Info() {}

    public Info(Integer infoId, String infoName, String infoDesc, double infoNumber, Date infoDate) {
        super();
        this.infoId = infoId;
        this.infoName = infoName;
        this.infoDesc = infoDesc;
        this.infoNumber = infoNumber;
        this.infoDate = infoDate;
    }

    public Integer getInfoId() {
        return infoId;
    }

    public void setInfoId(Integer infoId) {
        this.infoId = infoId;
    }

    public String getInfoName() {
        return infoName;
    }

    public void setInfoName(String infoName) {
        this.infoName = infoName;
    }

    public String getInfoDesc() {
        return infoDesc;
    }

    public void setInfoDesc(String infoDesc) {
        this.infoDesc = infoDesc;
    }

    public double getInfoNumber() {
        return infoNumber;
    }

    public void setInfoNumber(double infoNumber) {
        this.infoNumber = infoNumber;
    }

    public Date getInfoDate() {
        return infoDate;
    }

    public void setInfoDate(Date infoDate) {
        this.infoDate = infoDate;
    }

    @Override
    public String toString() {
        return "Info [infoId=" + infoId + ", infoName=" + infoName + ", infoDesc=" + infoDesc + ", infoNumber="
                + infoNumber + ", infoDate=" + infoDate + "]";
    }
}

7、InfoDao.java

package com.test.springmvc.dao;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.test.springmvc.bean.Info;

@Repository
public class InfoDao {

    private static Map<Integer, Info>map = null;

    static{
        map=new HashMap<Integer,Info>();
        map.put(1, new Info(1, "infoA", "DescA",12345.6,new Date()));
        map.put(2, new Info(2, "infoB", "DescB",23456.7,new Date()));
        map.put(3, new Info(3, "infoC", "DescC",34567.8,new Date()));
        map.put(4, new Info(4, "infoD", "DescD",45678.9,new Date()));
    }

    public Collection<Info> getAll(){
        return map.values();
    }
    public Info getById(Integer id){
        return map.get(id);
    }
    public boolean add(Info info){
        map.put(map.size()+1, info);
        return true;
    }
}

8、Handler.java

package com.test.springmvc.handlers;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.test.springmvc.bean.Info;
import com.test.springmvc.dao.InfoDao;

@Controller
public class Handler {

    @Autowired
    public InfoDao infoDao;

    @RequestMapping("/list")
    public String show(Map<String, Object>map){
        map.put("infos", infoDao.getAll());
        return "list";
    }

    @RequestMapping(value="/emp",method=RequestMethod.GET)
    public String addPage(){
        return "edit";
    }

    @RequestMapping(value="/emp",method=RequestMethod.POST)
    public String save(@RequestParam Info info){
        System.out.println("save");
        return "redirect:/list";
    }

}

9、InfoConverter.java

package com.test.springmvc.handlers;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import com.test.springmvc.bean.Info;
import com.test.springmvc.dao.InfoDao;

@Component
public class InfoConverter implements Converter<String, Info>{

    @Override
    public Info convert(String str) {
        InfoDao infoDao = new InfoDao();
        try{
            if(str!=null){
                String[] infoSplit = str.split("-");
                System.out.println(infoSplit.length);
                if(infoSplit.length>=3){
                    Info info = new Info();
                    info.setInfoId(Integer.parseInt(infoSplit[0]));
                    info.setInfoName(infoSplit[1]);
                    info.setInfoDesc(infoSplit[2]);
                    if(infoSplit.length>=4){
                        System.out.println(infoSplit[3]);
                        info.setInfoNumber(Double.parseDouble(infoSplit[3]));
                        if(infoSplit.length>=5){
                            System.out.println(infoSplit[4]);
                            info.setInfoDate(new SimpleDateFormat("yyyyMMddHHmmss").parse(infoSplit[4]));
                        }
                    }
                    infoDao.add(info);
                    System.out.println(info.toString());
                    return info;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

}

10、index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <a href="list">list data</a>
    <br><br>

    <br>步骤:
    <br>1、建立对应的bean和dao
    <br>2、建立form表单
    <br>3、建立handler(①handler的参数需要更表单控件name值一样 ②要用@RequestParam修饰方法的参数)
    <br>4、建立converter类,且继承org.springframework.core.convert.converter.Converter
    <br>5、实现org.springframework.core.convert.converter.Converter的方法(添加操作数据需要的逻辑,记得return对应的Bean)
    <br>6、到Spring配置文件中配置conversionService,而且使用ref标签指定转换器类名
    <br>
    <br>作用:
    <br>配置之后就能对指定的Bean的类型转换起到统一作用,凡是有关该bean的类型转换都会调用对应的类型转换类,这样能简化类型转换方面的代码
    <br>
</body>
</html>

11、list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Info list</title>
</head>
<body>
    <a href="emp">Add info</a>
    <br><br>

    <c:if test="${empty requestScope.infos}">
        no data
    </c:if>
    <c:if test="${!empty requestScope.infos}">
        <table border="1" cellpadding="10" cellspacing="0">
            <tr>
                <td>infoId</td>
                <td>infoName</td>
                <td>infoDesc</td>
                <td>infoNumber</td>
                <td>infoDate</td>
            </tr>
            <c:forEach items="${requestScope.infos}" var="infoData">
                <tr>
                <td>${infoData.infoId}</td>
                <td>${infoData.infoName}</td>
                <td>${infoData.infoDesc}</td>
                <td>${infoData.infoNumber}</td>
                <td>${infoData.infoDate}</td>
            </tr>
            </c:forEach>
        </table>
    </c:if>
</body>
</html>

12、edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Add Info</title>
</head>
<body>

    <form:form method="POST" action="emp">
        info:<input type="text" name="info" value="5-NAME5-DESC5-1234.4-20170730103322">
        <br>
        <input type="submit" value="submit">
    </form:form>

</body>
</html>

13、项目目录
项目目录

14、demo
https://download.csdn.net/download/qq_22778717/10601127

猜你喜欢

转载自blog.csdn.net/qq_22778717/article/details/81633014