Spring MVC 之 AbstractCommandController


定义继承AbstractCommandController的控制器,实现数据的自动封装


Controller

package com.hsit.controller;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.config.CustomEditorConfigurer;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;

import com.hsit.pojo.UserInfo;

public class UserInfoController extends AbstractCommandController {

	@Override
	protected ModelAndView handle(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		// TODO Auto-generated method stub
		UserInfo user = (UserInfo) command;
		System.out.println(user);
		return null;
	}


}


JavaBean

package com.hsit.pojo;

import java.util.Date;

public class UserInfo {

	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "username=" + username + ",password=" + password;
	}

}


jsp 视图

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
        
    <title></title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<!--
	<script type="text/javascript" src="js/*.js"></script>
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    	<center>
    		<form action="Login.do" method="post">
    			用户名:<input type="text" name="username" size="20"/><br>
    			账  号:<input type="password" name="password" size="20"><br>
    			<!--name名字一定要和UserInfo的属性名一样,才能正确封装-->
    			<input type="submit" value="提交">
    		</form>
    	</center>
  </body>
</html>

配置如下

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	
	<!-- 配置处理器映射采用SimpleUrlHandlerMapping -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
		<!-- props底下的prop标签内填写的key都是符合转发条件的url值,之后跟的是bean的ID,
		如果输入的url值与key值中的url匹配,则执行对应beanID绑定的Controller -->
			<props>
				<prop key="go.do">go</prop>
				<prop key="test.do">test</prop>
				<prop key="goLogin.do">goLogin</prop>
				<prop key="Login.do">Login</prop>
			</props>
		</property>
	</bean>
	
	<!-- 配置视图解释器 -->
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<!-- 属性prefix和suffix指定的是你的视图文件所在的路径,以及他的后缀是什么(就是类型)
			以下指的就是  /WEB-INF/jsp/*.jsp
		 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<!-- 控制器配置 -->
	
	<bean id="goLogin" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
		<property name="viewName" value="login" />
	</bean>
	<!-- 属性commandClass的value值设置成数据要封装成什么类型,执行到该控制器时就会自动将数据封装成UserInfo-->
	<bean id="Login" class="com.hsit.controller.UserInfoController">
		<property name="commandClass" value="com.hsit.pojo.UserInfo" />
	</bean>
	
</beans>

地址栏:http://colo-pc:8080/SpringMVC01/goLogin.do


输入框中输入的用户名和密码将会自动封装到UserInfo对应的属性中去


但是有一种情况我们不能成功将数据封装起来,如果.jsp界面要我们输入的信息有包括时间的话,Controller不能正确将输入框中的时间正确封装成为Date对象,因为输入框中的值带到Controller中时,都是String类型的。这时候我们就要在Controller中重写一个方法initBinder,来进行数据格式转换。

配置文件不变


jsp在表单中添加

日  期:<input type="text" name="date" size="20"><br><br>

Controller.java

package com.hsit.controller;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;

import com.hsit.pojo.UserInfo;

public class UserInfoController extends AbstractCommandController {

	@Override
	protected ModelAndView handle(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		// TODO Auto-generated method stub
		UserInfo user = (UserInfo) command;
		System.out.println(user);
		return null;
	}

	@Override
	protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) throws Exception {
                /*数据转换成Date类型*/
		binder.registerCustomEditor(Date.class, new CustomDateEditor(
				new SimpleDateFormat("yyyy-MM-dd"), true));
	}

}

当然还要在UserInfo中添加个Date的属性和相应的setter和getter方法,通过以上的修改,就能成功将表单中的时间信息封装进UserInfo中去了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值