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
智能推薦
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 ...
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 以上述例子,判斷一個生產出...