定义继承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中去了
===========================================================================================
以上文章转自: http://blog.csdn.net/q3498233/article/details/6703006
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?