`
JavaCrazyer
  • 浏览: 3012187 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Struts温习(4)--自定义java.util.Date转换器

阅读更多

 

在Struts开发中经常可以发现,用户提交的请求数据中,基本数据类型和java.sql.Date或java.sql.Time类型都能被封装到ActionForm类中,在页面可以直接取到用户输入的数值。唯有java.util.Date的数据不能封装,究其原因就是在提交请求时,RequestProcessor类在进行数据收集时没有将java.util.Date类型的数据进行转换。所以查看Struts源代码可以发现我们要做的就是简单的两件事

 

第一,如源代码中装换示例一样,自定义一个类实现org.apache.commons.beanutils.Converter接口

 

package com.javacrazyer.web.common;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.commons.beanutils.Converter;

/**
 * 自定义的java.util.Date的类型转换器
 *
 */
public class UtilDateConverter implements Converter {
	
	public static final String DATE_PATTERN = "yyyy-MM-dd";

	/* (non-Javadoc)
	 * @see org.apache.commons.beanutils.Converter#convert(java.lang.Class, java.lang.Object)
	 */
	@Override
	public Object convert(Class arg0, Object arg1) {
		
		Object obj = null;
		if(java.util.Date.class == arg0){
			if(arg1 != null && arg1 instanceof String){
				DateFormat df = new SimpleDateFormat(DATE_PATTERN);
				
				try {
					obj = df.parse((String)arg1);
				} catch (ParseException e) {
					e.printStackTrace();
				}
				
			}
		}
		
		return obj;
	}

}

 第二,在web项目进行部署时应该像源代码在ActionServlet中一样做一下注册的工作

 

      要实现注册那么必须写一个注册的Servlet类;

 

package com.javacrazyer.web.common;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.ConvertUtils;

public class UtilDateConverterRegisterServlet extends HttpServlet {

	public void init() throws ServletException {
		ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);
	}

}

 

 然后在web.xml配置中将注册的Servlet类设定为自动启动但级别要比ActionServlet低些

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>UtilDateConverterRegisterServlet</servlet-name>
    <servlet-class>com.javacrazyer.web.common.UtilDateConverterRegisterServlet</servlet-class>
  	<load-on-startup>5</load-on-startup>
  </servlet>



  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 


示例

input.jsp

 

<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts应用:ActionForm作为类型转换器</title>
  </head>
  
  <body>
    <h3>Struts应用:ActionForm作为类型转换器</h3><hr/>
    <form id="myForm" name="myForm" action="registe.do" method="post">
    	<table border="1" width="600px">
    		<tr>
    			<td>int类型的数据</td>
    			<td><input type="text" name="intValue"/></td>
    		</tr>
    		<tr>
    			<td>double类型的数据</td>
    			<td><input type="text" name="doubleValue"/></td>
    		</tr>
    		<tr>
    			<td>char类型的数据</td>
    			<td><input type="text" name="charValue"/></td>
    		</tr>
    		<tr>
    			<td>boolean类型的数据</td>
    			<td><input type="text" name="boolValue"/></td>
    		</tr>
    		
    		<tr>
    			<td>java.util.Date类型的数据</td>
    			<td><input type="text" name="dateValue"/></td>
    		</tr>
    		
    		<tr>
    			<td>java.sql.Date类型的数据</td>
    			<td><input type="text" name="sqlDateValue"/></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="center">
    				<input type="submit" value="提交"/>&nbsp;
    				<input type="reset" value="重置"/>
    			</td>
    		</tr>
    	</table>
    </form>
    
  </body>
</html>

 

 RegisterForm.java

 

package com.javacrazyer.web.formbean;

import java.util.Date;

import org.apache.struts.action.ActionForm;

/**
 * 用来收集客户端提交数据.
 * 要收集数据的属性的名一定要跟请求参数名相同
 * 
 */
public class RegisterForm extends ActionForm {
	
	private static final long serialVersionUID = 6619272689058619128L;

	private int intValue;
	private double doubleValue;
	private char charValue;
	private boolean boolValue;
	
	private Date dateValue;
	private java.sql.Date sqlDateValue;
	
	public java.sql.Date getSqlDateValue() {
		return sqlDateValue;
	}
	public void setSqlDateValue(java.sql.Date sqlDateValue) {
		this.sqlDateValue = sqlDateValue;
	}
	public Date getDateValue() {
		return dateValue;
	}
	public void setDateValue(Date dateValue) {
		this.dateValue = dateValue;
	}
	public int getIntValue() {
		return intValue;
	}
	public void setIntValue(int intValue) {
		this.intValue = intValue;
	}
	public double getDoubleValue() {
		return doubleValue;
	}
	public void setDoubleValue(double doubleValue) {
		this.doubleValue = doubleValue;
	}
	public char getCharValue() {
		return charValue;
	}
	public void setCharValue(char charValue) {
		this.charValue = charValue;
	}
	public boolean getBoolValue() {
		return boolValue;
	}
	public void setBoolValue(boolean boolValue) {
		this.boolValue = boolValue;
	}
}

 WEB-INF/struts-config.xml

 

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>

<!-- ================================================ Form Bean Definitions -->
    <form-beans>
		<form-bean name="loginForm" type="com.javacrazyer.web.formbean.LoginForm"/>
		<form-bean name="regForm" type="com.javacrazyer.web.formbean.RegisterForm"/>
    </form-beans>

<!-- =========================================== Action Mapping Definitions -->
    <action-mappings>
	
		
		<action path="/registe" 
			name="regForm"
			scope="request"
			validate="false"
			type="com.javacrazyer.web.action.RegisterAction">
			<forward name="result" path="/result.jsp"/>
		</action>
    </action-mappings>
</struts-config>

 result.jsp

 

<%@ page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>注册信息</title>
  </head>
  
  <body>
    <h3>注册信息</h3><hr/>
   	intValue: ${regForm.intValue }<br/>
   	doubleValue: ${regForm.doubleValue }<br/>
   	charValue: ${regForm.charValue }<br/>
   	boolValue: ${regForm.boolValue }<br/>
   	java.sql.Date: ${regForm.sqlDateValue }<br/>
   	java.util.Date: ${regForm.dateValue }<br/>
  </body>
</html>

 执行效果



 



 看到了吗,成功的接收了java.util.Date的值

 

 

 

  • 大小: 8.5 KB
  • 大小: 2.5 KB
分享到:
评论

相关推荐

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    转换`java.util.Date`到`java.sql.Date`非常简单,只需要调用`java.sql.Date`的构造器,并传递`java.util.Date`对象的时间戳即可。 ```java java.util.Date utilDate = new java.util.Date(); java.sql.Date sql...

    java.util.Date与java.sql.Date相互转换

    ### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...

    jdk-8u191-linux-x64.tar.gz

    Date和Time API的改进(位于`java.time`包下)取代了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、线程安全且易于使用的日期和时间处理功能。 Nashorn JavaScript引擎则让Java应用可以直接执行...

    jdk-8u251-linux-x64.tar.gz

    4. **日期和时间API的改进**:JDK8引入了新的`java.time`包,替换原有的`java.util.Date`和`java.util.Calendar`,提供了更加友好和易用的日期和时间API。 5. **接口的默认方法**:接口现在可以定义默认方法,这些...

    jdk-8u333-linux-x64.tar.gz

    5. **日期和时间API**:Java 8引入了全新的java.time包,提供了更好的日期和时间处理功能,取代了过时的java.util.Date和java.util.Calendar。 6. **类型注解**:增强了类型系统的元数据能力,允许在类型系统中添加...

    jdk-8u201-linux-x64.tar.gz jdk8版本下载

    日期和时间API的改进则消除了对`java.util.Date`和`java.util.Calendar`类的依赖,提供了更直观的日期和时间操作。 在Linux环境中,JDK的使用还包括配置Tomcat、Eclipse等Java应用服务器和IDE,以及进行Java项目的...

    jdk-8u144-linux-x64.tar.gz

    4. **Date和Time API的改进**:提供了新的`java.time`包,替代了旧的`java.util.Date`和`java.util.Calendar`,提供了更好的日期和时间操作。 5. **Optional类**:用于处理可能为空的对象,防止空指针异常。 **在...

    jdk-8u241-linux-x64.tar.gz

    5. **日期与时间API**:`java.time`包替代了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、易用且功能丰富的日期和时间API,如`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等。...

    java.sql.date与java.util.date.pdf

    - `java.sql.Date` 是 `java.util.Date` 的子类,可以通过`new java.sql.Date(java.util.Date.getTime())`进行转换。 **转换方法**: - **从 `java.util.Date` 转换为 `java.sql.Date`**: ```java java.util....

    jdk-8u144-linux-x64.tar.gz.zip

    - Date/Time API的增强:引入了新的java.time包,替代了过时的java.util.Date和java.util.Calendar,提供了更强大且易用的日期和时间处理功能。 为了在系统中使用这个JDK,还需要配置环境变量。在.bashrc或.bash_...

    jdk-8u151-linux-x64.tar.gz 【官方jdk1.8 linux版】

    - **Date和Time API的改进**:移除了旧的`java.util.Date`和`java.util.Calendar`,引入了新的`java.time`包,提供更强大、更易用的时间日期处理功能。 - **方法引用来替代匿名内部类**:可以引用一个方法的签名,...

    jdk-8u101-linux-x64.tar.gz

    5. **日期与时间API**:JDK 8用`java.time`包替代了过时的`java.util.Date`和`java.util.Calendar`,提供了`LocalDate`,`LocalTime`,`LocalDateTime`,`ZonedDateTime`等更易用的类,以及`Duration`和`Period`用于...

    jdk1.8 64位官方正式版 jdk-8u45-linux-x64.tar.gz

    在日期和时间API上,Java 8用`java.time`包替换了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的API,如`LocalDate`、`LocalTime`和`LocalDateTime`,以及`Duration`和`Period`等。...

    jdk-8u181-linux-x64.tar.gz

    - **Date和Time API**:全新的`java.time`包,替代了旧的`java.util.Date`和`java.util.Calendar`,提供了更强大和易用的时间日期处理功能。 - **默认方法**:允许在接口中定义默认实现,增强了接口的功能性。 - **...

    jdk-8u191-linux-x64 .tar.gz

    5. **日期和时间API**:`java.time`包取代了旧的`java.util.Date`和`java.util.Calendar`,提供了更强大、更易用的时间日期操作。 6. **类型推断**:编译器可以自动推断局部变量的类型,简化代码编写。 7. **重复...

    jdk8-jdk-8u121-linux-x64.tar.gz

    5. **Date和Time API的改进**:Java 8提供了新的日期和时间API,以替换过时的java.util.Date和java.util.Calendar,提高了日期和时间处理的易用性和灵活性。 6. **新的 Nashorn JavaScript引擎**:允许在Java应用中...

    jdk-8u152-linux-x64.tar.gz 【jdk1.8,jdk8,linux 64位版】

    4. **Date and Time API (JSR 310)**: 提供了新的日期和时间类,替代了不完善的`java.util.Date`和`java.util.Calendar`。 5. **默认方法**: 接口中可以定义带实现的方法,增强了接口的灵活性。 6. **Optional 类**:...

    jdk-8u321-linux-x64.tar.gz

    - **Date and Time API (JSR 310)**:提供了全新的日期时间API,比旧的`java.util.Date`和`java.util.Calendar`更强大,更易于使用。 - **接口默认方法**:接口中可以定义默认方法,为接口添加实现,而无需创建新的...

    jdk-8u271-linux-x64.tar.gz

    此外,还引入了新的日期和时间API,提供了更强大和易于使用的日期处理功能,替代了原有的java.util.Date和Calendar类。 JDK 1.8的另一个关键特性是方法引用来代替匿名内部类,这使得代码更简洁,提高了可读性。还有...

    jetty-util-9.4.43.v20210629-API文档-中文版.zip

    赠送jar包:jetty-util-9.4.43.v20210629.jar; 赠送原API文档:jetty-util-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-util-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.4.43.v...

Global site tag (gtag.js) - Google Analytics