码迷,mamicode.com
首页 > 编程语言 > 详细

springmvc

时间:2017-08-19 10:59:40      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:hub   mapper   https   current   精度   格式化   模式   order   vertica   

springmvc

SpringMVC

全名是Spring web mvc是web层的框架,它是Spring框架的一部分

springmvc处理流程

前端控制器(DispatcherServlet)是springmvc的心脏,用来拦截用户的请求,其本质是一个servlet,其收到请求后将数据交给处理器(handler)去执行相关处理

 

技术分享

springmvc处理流程图

 

Hello World

  • 导包 4+2+aop+web+webmvc+jstl(1.2版本只需一个文件即可)
  • 设置springmvc的约束文件
  • 新建config的source fold
  • 创建配置文件springmvc.xml,配置扫描controller包

编写springmvc的约束文件

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		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.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
	
	<context:component-scan base-package="top.xiesen.springmvc"></context:component-scan>
	
</beans>

配置web.xml文件

配置web.xml文件,配置前端控制器和 servlet 的初始化参数为 springmvc 配置文件的路径,和Spring相同 param-namecontextConfigLocation ,只不过这个初始化参数指的是servlet的初始化参数(如果不配置路径,springmvc会默认去找 /WEB-INF/servlet名字-servlet.xml 此文件,如果没有此文件就会报异常)

<!-- 配置前端控制器DispatcherServlet -->
  <servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<!-- 自定义加载springmvc的路径,默认加载/WEB-INF/servlet-name-servlet.xml -->
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<!-- 设置随tomcat启动时加载 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>

编写controller层

  • 创建一个包叫做 controller 这个就是web层
  • 在其中创建类,用来处理请求,使用注解的形式将其配置到spring容器中,在其中创建方法处理请求

@Controller
public class RoleControl {

	// @RequestMapping是处理请求地址映射的注解
	@RequestMapping("/role/roleList.action")
	public ModelAndView roleList(){
		
		ModelAndView mv = new ModelAndView();
		// 设置的测试数据
		List<Role> list = new ArrayList<>();
		list.add(new Role(110, "hasd110", "dasa110", new Timestamp(System.currentTimeMillis())));
		list.add(new Role(120, "hasd120", "dasa120", new Timestamp(System.currentTimeMillis())));
		list.add(new Role(130, "hasd130", "dasa130", new Timestamp(System.currentTimeMillis())));
		list.add(new Role(140, "hasd140", "dasa140", new Timestamp(System.currentTimeMillis())));
		
		mv.addObject("list", list);
		mv.setViewName("/WEB-INF/view/role/roleList.jsp");
		
		return mv;
		
	}
}

springmvc架构

 

技术分享

springmvc架构示意图

 

核心架构的具体流程步骤如下:

1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

springmvc组件介绍及配置

DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

HandlerMapping:处理器映射器

HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等,在controller中对应的方法使用的 @RequestMapping 就是注解的方式配置,在企业开发过程中也是目前使用最多的配置方式.

Handler:处理器

Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。

HandlAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

ViewResolver:视图解析器

ViewResolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

View:视图

springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

说明

在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。可以认为是 一个中心三个基本点 ,需要用户开发的组件有handler、view

配置相关组件

  • 通过观察发现默认的处理器适配器和处理器映射器,在3.2后就推荐使用新的配置,所以我们要重新去配置新的处理器映射器和处理器适配器
  • 在springmvc的配置文件中需要将新的处理器映射器和处理器适配器配置如容器中
<!-- 配置处理器映射器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
	<!-- 配置处理器适配器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

注解驱动

直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。
springmvc使用<mvc:annotation-driven> 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter可早springmvc.xml配置文件中使用<mvc:annotation-driven> 替代注解处理器和适配器的配置。

视图解析器

通过配置视图解析器的前缀和后缀在前端控制器将modelAndView交给视图解析器的时候,会自动添加前前缀和后缀

<!-- 配置视图解析器前缀后缀 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
@Controller
public class RoleController {

	@Autowired
	RoleService rs;
	@RequestMapping("/role/roleList.action")
	public ModelAndView roleList(){

		ModelAndView mv = new ModelAndView();
		List<Role> roleList = rs.findAllRole();
		mv.addObject("list", roleList);
		// 自动添加前缀和后缀
		mv.setViewName("/role/roleList");
		return mv;
	}
}

静态资源放行

前端控制器的本质是一个servlet,所以utl-pattern 符合servlet的规则,但是springmvc是需要拦截请求才能使用框架进行处理的,所以关于路径匹配上一般不会使用完全路径匹配和目录匹配,一般设置为后缀名进行匹配(推荐使用这种方式),也可以使用 //* 是会对jsp进行拦截的,所以需要我们在controller中进行静态资源的放行操作,显然这种方式比较麻烦。
注意:如果前端控制器配置为扩展名匹配,是不需要设置静态资源放行的,强烈建议使用扩展名匹配

方式一

tomcat内部有一个叫做默认servlet的 url-pattern为 / 其可以处理静态资源,我们可以在配置文件中配置一个默认的servlet为这个,当所有路径都不匹配的时候让这个servlet进行处理,必须要配置注解驱动才能正常使用

<mvc:default-servlet-handler/>

方式二

手动建立映射关系, /** 表示可以有下一级文件夹,这种映射路径的方法,内部是由处理器映射器去执行具体的映射过程,所以必须要配置注解驱动如果不配置注解驱动会导致web应用无法访问,此方法的好处是路径可以直接在配置文件中进行指定

<mvc:resources location="/image/" mapping="/image/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/lib/" mapping="/lib/**"/>

classpath和classpath * 的区别

classpath:只会到你的class路径中查找找文件;
classpath *:不仅包含class路径,还包括jar文件中(class路径)进行查找.

注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的,因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*。

SSM整合

  • 导包
  • 创建config的source folder文件夹存放配置文件,在其内部创建两个文件夹spring(放spring配置文件)和mybatis(放mybatis的核心配置文件)
  • 将db.properties文件和log4j.properties文件放在config的根目录

 

技术分享

项目结构示意图

 

  • 在spring文件夹下创建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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		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.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
	
	<!-- 配置扫描controller层 -->
	<context:component-scan base-package="top.xiesen.ssm"></context:component-scan>
	
	<!-- 设置注解处理器映射器,处理器适配器注解驱动 -->
	<mvc:annotation-driven/>
	
	<!-- 配置视图解析器前缀后缀 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

</beans>
- 设置注解处理器映射器,处理器适配器注解驱动
- 配置视图解析器前缀后缀
- 配置扫描controller层
  • 在spring文件下创建applicationContext-dao.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">


	<!-- 加载配置文件 -->
	<context:property-placeholder location="classpath:db.properties" />

	<!-- 配置连接池 -->
	<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	
	<bean name="sqlSessionFactor" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:mybatis/sqlMappingConfig.xml"></property>
	</bean>
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="top.xiesen.ssm.mapper"></property>
	</bean>
	
</beans>
- 配置引入数据库db.properties
- 配置数据库连接池
- 配置sqlSessionFactory
- 配置mapper扫描
  • 在spring文件夹下创建applicationContext-service.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

<import resource="applicationContext-dao.xml"/>

<!-- 配置事务管理器 -->
	<bean name="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>  
	</bean>

	<!-- 配置事务通知 -->
	<tx:advice transaction-manager="transactionManager" id="txAdvice">
		<tx:attributes>
			<tx:method name="transfer" isolation="REPEATABLE_READ"
				read-only="false" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>

	<!-- 配置切面 -->
	<aop:config>
		<aop:pointcut
			expression="execution(* top.xiesen.ssm.service.impl..*ServiceImpl.*(..))"
			id="pc" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pc" />
	</aop:config>
	
</beans>
- 配置扫描service层注解
  • 在spring文件夹下创建applicationContext-tx.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

<import resource="applicationContext-service.xml"/>
<!-- 配置扫描service层注解 -->
<context:component-scan base-package="top.xiesen.ssm"></context:component-scan>
	
</beans>

 - 配置spring事务
  • 在mybatis文件夹下创建sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"mybatis-3-config.dtd">
<configuration>
	<!-- 配置别名 -->
	<typeAliases>
		<!-- <typeAlias type="top.xiesen.mybatis.pojo.User" alias="user"/> -->
		<!-- 会扫描当前包和子包下,会将别名设置为User user ,设置过别名以后再mapper文件中使用这个类的类型别名和全名都可以-->
		<package name="top.xiesen.ssm.model"/>
	</typeAliases>
</configuration>
  • 通过逆向工程生成mapper文件和model类
  • 给service层添加注解,并注入mapper
@Controller
public class RoleController {

	@Autowired
	RoleService rs;
	@RequestMapping("/role/roleList.action")
	public ModelAndView roleList(){

		ModelAndView mv = new ModelAndView();
		List<Role> roleList = rs.findAllRole();
		mv.addObject("list", roleList);
		mv.setViewName("/role/roleList");
		return mv;
	}
}
  • 配置web.xml文件
    • 配置Spring容器
    • 配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>chapter31_ssm</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>

	<!-- 配置Spring容器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext-tx.xml</param-value>
	</context-param>

	<!-- 配置SpringMVC -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>

</web-app>

参数绑定

默认支持参数类型

如果我们定义了请求,响应,session,springmvc就会将HttpServletRequest,HttpServletResponse,HttpSession三个对象作为参数传递过来,我们在定义的时候还可以写Model/ModelMap
Model/ModelMap是用来向页面进行传值使用的,这两个哪个都可以

@RequestMapping("/role/updateRole.action")
	public ModelAndView roleListId(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model,ModelMap modelMap){
		System.out.println(request+"---"+response+"----"+session+"------"+model+"-----"+modelMap);
		ModelAndView mv = new ModelAndView();
		String id = request.getParameter("id");
		System.out.println(id);
		Role role = rs.findRoleById(Integer.parseInt(id));
		mv.addObject("role", role);
		mv.setViewName("role/updateRole");
		return mv;
	}

简单参数类型

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

  • 整形:Integer、int
  • 字符串:STring
  • 单精度:Float、float
  • 双精度:Double、double
  • 布尔值:Boolean、boolean

说明:对于布尔类型的参数,请求的参数为true或false。或者1或0
请求url:http://localhost:8080/xxx.action?id=2&status=false 处理器方法:public String editltem(Model model,Integer id, Boolean status)`

@RequestParam

如果表单中的name属性和参数名称不一致的时候可以使用@RequestParam 建立映射关系,一旦使用了这个注解,传递的参数就必须含有改名称,就会报错误

 

技术分享

enter description here

 

  • required属性表示页面传过来的值是否是必须的,默认true
  • defaultValue表示如果没有该值默认是多少
@RequestMapping("/role/updateRole.action")
	public ModelAndView roleListId(@RequestParam(value="id",defaultValue="1",required=true) Integer theid){
		ModelAndView mv = new ModelAndView();
		Role role = rs.findRoleById(theid);
		mv.addObject("role", role);
		mv.setViewName("role/updateRole");
		return mv;
	}

参数绑定model类

需保证表单的name属性和model中的属性中的属性一一对应

@RequestMapping("/role/editRole.action")
	public ModelAndView EditRole(Role role){
		ModelAndView mv = new ModelAndView();
		rs.updateRole(role);
		mv.addObject("role", role);
		mv.setViewName("role/success");
		return mv;
	}

 

技术分享

enter description here

 

解决乱码

在web.xml中配置编码过滤器

<!-- 配置全局编码 -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>

参数绑定包装类

如果是包装类中的属性,需要将表单信息中的name属性名设置为类中属性的属性

 

技术分享

enter description here

 

 

技术分享

enter description here

 

@RequestMapping("/role/mulSubmit.action")
	public ModelAndView mulSubmit(RoleVo rv){
		ModelAndView mv = new ModelAndView();
		
		rs.updateMulRole(rv.getList());
		mv.setViewName("role/success");
		return mv;
	}

数组参数绑定

在表单如果有CheckBox这种多选框,提交到controller,可以通过数组的形式进行获取,那么需要将CheckBox的name属性设置为方法的参数的名称,也可以在包装类中定义成员变量的名字为表单的name属性

 

技术分享

enter description here

 

 

技术分享

enter description here

 

@RequestMapping("/role/editRole.action")
	public ModelAndView EditRole(RoleVo rv,String[] hobbys){
		ModelAndView mv = new ModelAndView();
		rs.updateRole(rv.getRole());
		System.out.println(rv);
		System.out.println(Arrays.toString(hobbys));
		mv.setViewName("role/success");
		return mv;
	}

集合类型参数绑定

在表单中如果牵扯到表单中的数据批量修改,并且每一行有多个数据都有更改且有多行,我们可以把每一行当作一个对象,把多行数据放入对象集合中进行提交,不过这种方法仅仅适合于包装类,不能直接把值传入相应的参数

 

技术分享

enter description here

 

 

技术分享

enter description here

 

	/**
	 * 这种情况仅仅适合包装类,不能将集合赋值给参数
	 * @param rv
	 * @return
	 */
	@RequestMapping("/role/mulSubmit.action")
	public ModelAndView mulSubmit(RoleVo rv /*,List<Role> list*/){
		//System.out.println(list);
		ModelAndView mv = new ModelAndView();
		rs.updateMulRole(rv.getList());
		mv.setViewName("role/success");
		return mv;
	}

自定义格式类型转换(了解即可)

可以进行日期的转换,以及数据的相应格式化(比如将表单提交的数据加前后缀)springmvc给我们提供一个转换器工程,我们可以通过这个转换器工程生产很多转换类(实现Convert接口)按照我们的要求进行数据的格式转换,对方法参数赋值的事情是处理器适配器做的,所以配置的工作应该交给处理器适配器,而在springmvc中我们已经通过注解配置了这个组件,所以配置应该在 mvc:annotation-driven/ 进行设置

  • 编写转换类DateConvert
/**
 * Converter<S, T>
 * S:source,需要转换的源的类型
 * T:target,需要转换的目标类型 
 */
public class DateConvert implements Converter<String,Timestamp>{

	@Override
	public Timestamp convert(String string) {
		DateFormat df = new SimpleDateFormat("yyyy+MM+dd HH:mm:ss");
		Timestamp timestamp =null;
		try {
			timestamp = new Timestamp(df.parse(string).getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return timestamp;
	}
}

  • 在springmvc中配置DateConvert,并注册到适配器中
<!-- 2.设置注解处理器映射器,处理器适配器注解驱动 -->
	<mvc:annotation-driven conversion-service="formattingConversion" />
	<!-- 配置日期转换工厂 -->
	<bean name="formattingConversion"
		class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<bean class="top.xiesen.ssm.util.DateConvert"></bean>
			</set>
		</property>
	</bean>

注意页面显示和model类

 

技术分享

enter description here

 

    @DateTimeFormat(pattern="yyyy-MM-dd‘T‘HH:mm")
    private Date rUpdatetime;

 

技术分享

enter description here

 

  1. <td colspan="3" class="control"> 
  2. <input type="datetime-local" name="role.rUpdatetime"  
  3. value="<fmt:formatDate value="${role.rUpdatetime }" type="both" pattern="yyyy-MM-dd‘T‘HH:mm"/>" > 
  4. </td> 

 

技术分享

enter description here

 

@RequestMapping("/role/editRole.action")
	public ModelAndView EditRole(RoleVo rv,String[] hobbys){
		ModelAndView mv = new ModelAndView();
		rs.updateRole(rv.getRole());
		System.out.println(rv);
		System.out.println(Arrays.toString(hobbys));
		mv.setViewName("role/success");
		return mv;
	}

springmvc

标签:hub   mapper   https   current   精度   格式化   模式   order   vertica   

原文地址:http://www.cnblogs.com/xiesen310/p/7395496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!