• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SSM筆記-SpringMVC的自定義類型轉換器

    標簽: 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

    版權聲明:本文為qq_22778717原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_22778717/article/details/81633014

    智能推薦

    SpringMVC學習筆記14-----數據綁定與自定義類型轉換器

    一、問題分析        在之前的增刪改查中,數據都是通過表單傳向方法然后轉化成相應的數據類型!那么如果我們在java bean中再添加一個日期屬性birth時,就會有三個問題: 1.如何將表單中的字符串格式轉向日期格式:數據類型轉換 2.表單中輸入的字符串格式應該是怎么樣的:數據類型格式化 3.這是個生日屬性,既然是生日屬性就應該是當前日期的前面的時間,...

    自定義類型轉換器

    自定義類型轉換器 1、表單提交的任何數據類型全部都是字符串類型,但是后臺定義Integer類型,數據也可以封裝上,說明Spring框架內部會默認進行數據類型轉換 2、如果想自定義數據類型轉換,可以實現Converter的接口 使用步驟: 第一步:第一個類,實現Converter接口,該接口有兩個泛型。 第二步在配置文件中配置自定義類型轉換器 運行項目:...

    自定義類型轉換器

    自定義類型轉換器 字符串變成對象 自定義步驟 1 修改input.jsp頁面,實現Employee字符串變為POJO 2 Handler 3 自定義的轉化器(@Component) 4 springmvc的配置文件ConversionServiceFactoryBean 5 <mvc:annotation-driven>引用轉換器 6 debug  ...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡