Just a little smile ^ ^

yoyo_zeng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Controller

  1. package com.hsit.controller;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.beans.factory.config.CustomEditorConfigurer;  
  10. import org.springframework.beans.propertyeditors.CustomDateEditor;  
  11. import org.springframework.validation.BindException;  
  12. import org.springframework.web.bind.ServletRequestDataBinder;  
  13. import org.springframework.web.servlet.ModelAndView;  
  14. import org.springframework.web.servlet.mvc.AbstractCommandController;  
  15.   
  16. import com.hsit.pojo.UserInfo;  
  17.   
  18. public class UserInfoController extends AbstractCommandController {  
  19.   
  20.     @Override  
  21.     protected ModelAndView handle(HttpServletRequest request,  
  22.             HttpServletResponse response, Object command, BindException errors)  
  23.             throws Exception {  
  24.         // TODO Auto-generated method stub  
  25.         UserInfo user = (UserInfo) command;  
  26.         System.out.println(user);  
  27.         return null;  
  28.     }  
  29.   
  30.   
  31. }  

JavaBean

  1. package com.hsit.pojo;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class UserInfo {  
  6.   
  7.     private String username;  
  8.     private String password;  
  9.   
  10.     public String getUsername() {  
  11.         return username;  
  12.     }  
  13.   
  14.     public void setUsername(String username) {  
  15.         this.username = username;  
  16.     }  
  17.   
  18.     public String getPassword() {  
  19.         return password;  
  20.     }  
  21.   
  22.     public void setPassword(String password) {  
  23.         this.password = password;  
  24.     }  
  25.   
  26.     @Override  
  27.     public String toString() {  
  28.         return "username=" + username + ",password=" + password;  
  29.     }  
  30.   
  31. }  

jsp 视图

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.           
  7.     <title></title>  
  8.       
  9.     <meta http-equiv="pragma" content="no-cache">  
  10.     <meta http-equiv="cache-control" content="no-cache">  
  11.     <meta http-equiv="expires" content="0">      
  12.     <!--  
  13.     <script type="text/javascript" src="js/*.js"></script>  
  14.     <link rel="stylesheet" type="text/css" href="styles.css">  
  15.     -->  
  16.   
  17.   </head>  
  18.     
  19.   <body>  
  20.         <center>  
  21.             <form action="Login.do" method="post">  
  22.                 用户名:<input type="text" name="username" size="20"/><br>  
  23.                 账  号:<input type="password" name="password" size="20"><br>  
  24.                 <!--name名字一定要和UserInfo的属性名一样,才能正确封装-->  
  25.                 <input type="submit" value="提交">  
  26.             </form>  
  27.         </center>  
  28.   </body>  
  29. </html>  

配置如下

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  7.       
  8.     <!-- 配置处理器映射采用SimpleUrlHandlerMapping -->  
  9.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  10.         <property name="mappings">  
  11.         <!-- props底下的prop标签内填写的key都是符合转发条件的url值,之后跟的是bean的ID,  
  12.         如果输入的url值与key值中的url匹配,则执行对应beanID绑定的Controller -->  
  13.             <props>  
  14.                 <prop key="go.do">go</prop>  
  15.                 <prop key="test.do">test</prop>  
  16.                 <prop key="goLogin.do">goLogin</prop>  
  17.                 <prop key="Login.do">Login</prop>  
  18.             </props>  
  19.         </property>  
  20.     </bean>  
  21.       
  22.     <!-- 配置视图解释器 -->  
  23.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
  24.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  25.         <!-- 属性prefix和suffix指定的是你的视图文件所在的路径,以及他的后缀是什么(就是类型)  
  26.             以下指的就是  /WEB-INF/jsp/*.jsp  
  27.          -->  
  28.         <property name="prefix" value="/WEB-INF/jsp/" />  
  29.         <property name="suffix" value=".jsp"></property>  
  30.     </bean>  
  31.       
  32.     <!-- 控制器配置 -->  
  33.       
  34.     <bean id="goLogin" class="org.springframework.web.servlet.mvc.ParameterizableViewController">  
  35.         <property name="viewName" value="login" />  
  36.     </bean>  
  37.     <!-- 属性commandClass的value值设置成数据要封装成什么类型,执行到该控制器时就会自动将数据封装成UserInfo-->  
  38.     <bean id="Login" class="com.hsit.controller.UserInfoController">  
  39.         <property name="commandClass" value="com.hsit.pojo.UserInfo" />  
  40.     </bean>  
  41.       
  42. </beans>  


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

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

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

配置文件不变

jsp在表单中添加

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


Controller.java

  1. package com.hsit.controller;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.beans.propertyeditors.CustomDateEditor;  
  10. import org.springframework.validation.BindException;  
  11. import org.springframework.web.bind.ServletRequestDataBinder;  
  12. import org.springframework.web.servlet.ModelAndView;  
  13. import org.springframework.web.servlet.mvc.AbstractCommandController;  
  14.   
  15. import com.hsit.pojo.UserInfo;  
  16.   
  17. public class UserInfoController extends AbstractCommandController {  
  18.   
  19.     @Override  
  20.     protected ModelAndView handle(HttpServletRequest request,  
  21.             HttpServletResponse response, Object command, BindException errors)  
  22.             throws Exception {  
  23.         // TODO Auto-generated method stub  
  24.         UserInfo user = (UserInfo) command;  
  25.         System.out.println(user);  
  26.         return null;  
  27.     }  
  28.   
  29.     @Override  
  30.     protected void initBinder(HttpServletRequest request,  
  31.             ServletRequestDataBinder binder) throws Exception {  
  32.                 /*数据转换成Date类型*/  
  33.         binder.registerCustomEditor(Date.classnew CustomDateEditor(  
  34.                 new SimpleDateFormat("yyyy-MM-dd"), true));  
  35.     }  
  36.   
  37. }  


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

===========================================================================================

以上文章转自: http://blog.csdn.net/q3498233/article/details/6703006

posted on 2011-09-29 14:20  yoyo_zeng  阅读(848)  评论(0编辑  收藏  举报