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