struts2的时间格式转换问题

struts2(时间日期类型转换器) struts2(时间日期类型转换器) 简洁 易懂 立即下载

关键字: struts2

    struts2提供了一个时间标签:

Xml代码 复制代码
  1. <s:date name="todayDate" format="yyyy-MM-dd" />  

   但这个标签很只能在显示的时候用,但如果我想在输入框里显示时间,让用户直接修改时间,怎么弄?datepicker?选择太麻烦,我想让用户输入,并且兼容多种日期格式。还有,如果用时间标签的话,每个地方都需要指定format,如果我想修改一下格式,所有的时间显示都变,怎么弄?

 

翻了一下struts2的源码,和文档,找到一个办法。  com.opensymphony.xwork2.util.XWorkConverter

Java代码 复制代码
  1. * <p/> In some situations you may wish to apply a type converter globally.    
  2. *  This can be done by editing the file   
  3. * <b>xwork-conversion.properties</b> in the root of your class path    
  4. * (typically WEB-INF/classes) and providing a   
  5. * property in the form of the class name of the object you wish to convert    
  6. * on the left hand side and the class name of   
  7. * the type converter on the right hand side. For example, providing    
  8. * a type converter for all Point objects would mean   
  9. * adding the following entry:   
  10. *   
  11. * <p/><b>com.acme.Point = com.acme.PointConverter</b>  
 * <p/> In some situations you may wish to apply a type converter globally. 
 *  This can be done by editing the file
 * <b>xwork-conversion.properties</b> in the root of your class path 
 * (typically WEB-INF/classes) and providing a
 * property in the form of the class name of the object you wish to convert 
 * on the left hand side and the class name of
 * the type converter on the right hand side. For example, providing 
 * a type converter for all Point objects would mean
 * adding the following entry:
 *
 * <p/><b>com.acme.Point = com.acme.PointConverter</b>

 

XWorkConverter,先在classpath root下找xwork-conversion.properties文件,这个文件定义了全局转换。然后每遇到新的类需要转换,便查找是否有特殊的自定义转换配置。特殊自定义转换配置文件的路径是:

Java代码 复制代码
  1. className.replace('.', '/') + "-conversion.properties";  
className.replace('.', '/') + "-conversion.properties";

 比方com.acme.Point的转换配置就是classpath 下的/com/acme/Point-coversion.properties文件。

 

ok,这个问题好解决了。

 

我的xwork-coversion.properties文件:

Xml代码 复制代码
  1. java.util.Date=cn.jolstar.struts.type.DateTypeConverter  

 我的DateTypeConverter代码:

Java代码 复制代码
  1. /**  
  2.  *   
  3.  */  
  4. package cn.jolestar.struts.type;   
  5.   
  6. import java.text.DateFormat;   
  7. import java.text.ParseException;   
  8. import java.text.SimpleDateFormat;   
  9. import java.util.Date;   
  10. import java.util.Map;   
  11.   
  12. import org.apache.log4j.Logger;   
  13. import org.apache.struts2.util.StrutsTypeConverter;   
  14.   
  15.   
  16. /**  
  17.  * @author jolestar  
  18.  *   
  19.  */  
  20. public class DateTypeConverter extends StrutsTypeConverter {   
  21.   
  22.     private static final Logger log = Logger.getLogger(DateTypeConverter.class);   
  23.     public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";   
  24.        
  25.     //暂时只考虑这几种日期格式   
  26.     public static final DateFormat[] ACCEPT_DATE_FORMATS = {   
  27.             new SimpleDateFormat(DEFAULT_DATE_FROMAT),   
  28.             new SimpleDateFormat("yyyy年MM月dd日"),   
  29.             new SimpleDateFormat("yyyy/MM/dd") };   
  30.   
  31.     /**  
  32.      *   
  33.      */  
  34.     public DateTypeConverter() {   
  35.     }   
  36.   
  37.     /*  
  38.      * (non-Javadoc)  
  39.      *   
  40.      * @see org.apache.struts2.util.StrutsTypeConverter#convertFromString(java.util.Map,  
  41.      *      java.lang.String[], java.lang.Class)  
  42.      */  
  43.     @Override  
  44.     public Object convertFromString(Map context, String[] values, Class toClass) {   
  45.         if (values[0] == null || values[0].trim().equals(""))   
  46.             return null;   
  47.         for (DateFormat format : ACCEPT_DATE_FORMATS) {   
  48.             try {   
  49.                 return format.parse(values[0]);   
  50.             } catch (ParseException e) {   
  51.                 continue;   
  52.             } catch (RuntimeException e) {   
  53.                 continue;   
  54.             }   
  55.         }   
  56.         log.debug("can not format date string:" + values[0]);   
  57.         return null;   
  58.     }   
  59.   
  60.     /*  
  61.      * (non-Javadoc)  
  62.      *   
  63.      * @see org.apache.struts2.util.StrutsTypeConverter#convertToString(java.util.Map,  
  64.      *      java.lang.Object)  
  65.      */  
  66.     @Override  
  67.     public String convertToString(Map context, Object o) {   
  68.         if (o instanceof Date) {   
  69.             SimpleDateFormat format = new SimpleDateFormat(   
  70.                     DEFAULT_DATE_FORMAT);   
  71.             try {   
  72.                 return format.format((Date) o);   
  73.             } catch (RuntimeException e) {   
  74.                 return "";   
  75.             }   
  76.         }   
  77.         return "";   
  78.     }   
  79.   
  80. }  
/**
 * 
 */
package cn.jolestar.struts.type;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.util.StrutsTypeConverter;


/**
 * @author jolestar
 * 
 */
public class DateTypeConverter extends StrutsTypeConverter {

	private static final Logger log = Logger.getLogger(DateTypeConverter.class);
	public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
	
	//暂时只考虑这几种日期格式
	public static final DateFormat[] ACCEPT_DATE_FORMATS = {
			new SimpleDateFormat(DEFAULT_DATE_FROMAT),
			new SimpleDateFormat("yyyy年MM月dd日"),
			new SimpleDateFormat("yyyy/MM/dd") };

	/**
	 * 
	 */
	public DateTypeConverter() {
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts2.util.StrutsTypeConverter#convertFromString(java.util.Map,
	 *      java.lang.String[], java.lang.Class)
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		if (values[0] == null || values[0].trim().equals(""))
			return null;
		for (DateFormat format : ACCEPT_DATE_FORMATS) {
			try {
				return format.parse(values[0]);
			} catch (ParseException e) {
				continue;
			} catch (RuntimeException e) {
				continue;
			}
		}
		log.debug("can not format date string:" + values[0]);
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts2.util.StrutsTypeConverter#convertToString(java.util.Map,
	 *      java.lang.Object)
	 */
	@Override
	public String convertToString(Map context, Object o) {
		if (o instanceof Date) {
			SimpleDateFormat format = new SimpleDateFormat(
					DEFAULT_DATE_FORMAT);
			try {
				return format.format((Date) o);
			} catch (RuntimeException e) {
				return "";
			}
		}
		return "";
	}

}
 

 

 

这样,从字符串转换为日期对象的时候,会尝试上面列出的多种日期格式,但输出的时候,则会统一按照DEFAULT—DATE—FORMAT转换。 需要修改格式,只需要修改DEFAULT—DATE—FORMAT。当然,你也可以把它方在配置文件里,便于修改。

 

了解了这一点,其实也就 明白了struts的类型转换模式。然后,无论是字符串id到持久化对象的转换,还是自定义的字符串到对象之间的转换,都容易了。

Struts2类型转换(一)----常规类型,自定义类型,错误处理 NULL 博文链接:https://azrael6619.iteye.com/blog/415106 立即下载

相关推荐

uni-app刮奖

uni-app的刮奖效果,要注意的点: 1.小程序的canvas层级问题(可用cover-view规避) 2.不能操作dom 以下是uni-app刮奖效果的代码: <template> <!-- 刮奖 --> <view v-else class="scratch"> <view class="box"> &lt...

qq_40101922的博客 4306

Struts2 中 Timestamp 转换问题

function alarmValueByParam(){ var type=$("select.form-control").val(); var start=$("input[name='start']").val(); var end=$("input[name='end']").val(); var ways=$("#ways").val(); $.post(

wwwcomcn123的专栏 2398

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2787

java中struts2日期格式化,struts2日期类型转换

为什么要进行日期类型转换?在基于HTTP协议的web应用中,客户端请求的所有内容(如在表单中输入的姓名,年龄,生日,等)均都可以以文本编码方式传输到服务器端,但服务器端的编程语言(如java)有着丰富的数据类型,如int,boolean,Date及自定义类型等,因此,当这些参数进入应用程序时,他们必须被转换为合适的服务器端编程语言的数据类型。(p116)什么时候需要自定义类型转换器?在引入第三方j...

weixin_40006977的博客 249

Vivado SDK中LWIP库版本冲突与RTL8211FDI兼容性实战解析

本文深入解析Vivado 2019.1 SDK中LWIP 1.0库与RTL8211FDI千兆PHY芯片的版本冲突问题,并提供实战解决方案。通过手动移植高版本LWIP库、整合第三方驱动及优化BSP配置,有效解决了以太网通信兼容性问题,确保千兆性能稳定运行。

ios99的博客 271

AES-GCM加密认证模式:原理、优势与实战应用

在数据安全领域,加密与认证是保障信息机密性和完整性的两大基石。加密确保数据内容不被窃取,而认证则验证数据来源的真实性和传输过程中是否被篡改。传统的加密后认证方案如AES-CBC+HMAC需要串行处理,性能开销较大。GCM(伽罗瓦/计数器模式)作为一种认证加密(AEAD)方案,巧妙地将AES-CTR加密与基于伽罗瓦域的GHASH认证并行结合,实现了单次数据遍历即可同时完成加密和认证,大幅提升了处理效率。其核心价值在于高性能、支持附加认证数据(AAD)以及标准化程度高,广泛应用于TLS协议、无线网络安全和云存储

weixin_28622215的博客 311

struts2日期格式化

1.创建User实体package com.mxl.models; import java.util.Date; public class User { private Integer id; private String username; private String password; private String name; private String sex; privat...

903

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现

本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。

weixin_29238147的博客 314

struts2之日期类型转换

一,概述 struts2中默认会对1995-07-08这种日期类型的数据进行类型转换,转换为Date类型,但是有时用户在jsp页面提交表单时提交的是19950708、1995年07月08日这种类型的话,那么就会转换出错。解决方法当然就是自定义类型转换器了。 二,自定义局部类型转换器 1)注册页面提交数据 用户名: 密码: 年龄: 生日

bighuan的博客 2830

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 353

struts2自定义数据类型转换器------日期转换器

Action中最终需要的日期类型为:  Date sqlDate;  Time sqlTime;  java.util.Date utilDate; 自定义转换器存在必然性?若用默认的日期转换器,输入时间12:00会跑错。 以下代码自定义了一个日期转换器: public class DateTimeConvertor extends DefaultTypeConverter {  p

ld513508088的专栏 2678

YOLOv11在视频流中的时序建模改进-(加入ConvLSTM或Transformer捕捉帧间关联)

本文提出了一种结合ConvLSTM和Transformer的改进YOLOv11算法,用于增强视频目标检测的时序建模能力。针对视频检测中运动模糊、遮挡等挑战,研究分析了ConvLSTM的局部时空特征建模和Transformer的全局注意力机制之间的互补性。通过数学公式详细阐述了ConvLSTM的门控机制和Transformer的自注意力计算原理,并提出分层融合策略:底层使用ConvLSTM处理高分辨率特征捕捉局部运动,高层应用Transformer建立全局时空关联。改进方案在YOLOv11架构中插入时序增强模

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 678

博客开通第72天

1、今天遇到的问题: 通知单Dao里出现的问题,一直没有去注意: String GET_ALL_ITEMS_ALLCOUNT = "SELECT COUNT(1) FROM b_m_inform"+ where.toString();// B_M_Inform,ID,TITLE, // STATUS String GET_ALL_ITEMS = "SELE...

weixin_30416871的博客 105

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

利用Java反射机制将Json格式字符串反射为 Bean List

前面提到过Strtus2在2.1.6以后就将Json格式整合到Strtus中了,可见到struts-json-plugin,在Struts的文档里面有下面一段例子: Example Setup Action This simple action has some fields: Example: import java.util.HashMap; import java.u...

neu_swc的专栏 421

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

html和css如何画椭圆角,CSS3 利用border-radius实现椭圆角

整合struts2&plus;hibernate详细配置步骤及注意事项刚刚学完这两个框架,就迫不及待的做了一个例子,在整合两个框架的时候,也碰到了一些小问题,下面介绍一下配置的步骤: 1.创建一个自定义的struts2和hibernate的类库 因为之前写例子都是直接将 ...ado&period;net access oracle dataset via store proced...

weixin_39775872的博客 284

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【struts2】struts2实现自定义数据类型转换器

JSP提交的数据全部都是String类型的。struts2也是通过request.getParameter(name)获取到String类型数据,并通过拦截器将String转换成各种常用的数据类型,如:Date、Time、Timestamp等,然后通过getter、setter方法设置到Action对应的属性上。 struts2默认的转换器并不总是满足要求。例如:输入时间,struts2只能转换...

lmb55的专栏 1900

struts2自定义时间转换器

struts2默认时间格式是yyyy-MM-dd,要使用yyyyMMdd格式就要写格式转换器 第一步:写一个时间类型转换器  继承DefaultTypeConverter package utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;

Delver_Si 的博客 593

struts2-为什么是struts而不是servlet+jsp

servlet + jsp开发web应用程序是很多人标榜的web开发基础。struts不过是更加简单而已。不够高级。就像使用c语言的人觉得使用java的开发人员是菜鸟一样。于是我使用了servlet+jsp谢了一个最简单的前台向后台传值的例子。传递一个时间和姓名 jsp页面 <%@ page language="java" contentType="text/html; charset=u

shengshiqing的专栏 1116

Struts2日期类型转换

<s:submit type="submit" value="提交"/></td></tr><tr><td>用户名:<s:textfield name="user.username" /></td><tr><td>生日:<s:textfield name="user.birthday"/> </td><tr><td>年龄:<s:password name="user.age"/>

weixin_44917365的博客 338

java中struts2日期_Struts2日期类型转换

针对日期类java.util.Date进行类型转换,要求客户端使用“yyyy-MM-dd”,“yyyy/MM/dd”中的任意一种输入,并以“yyyy-MM-dd”的格式输出,该类型转换应用于全局范围先定义一个实体类packagecn.entity;importjava.util.Date;public classUser {private String username;//名字private I...

weixin_39592137的博客 81

struts2日期类型转换,继承StrutsTypeConverter

1.date.jsp页面 2.showdate.jsp页面 自定义转换类型: 3.Users实体类 public class Users { private String username; private String password; private Date birthday; public String getUserna

君莫笑丶 的博客 1017
上一篇: 很酷的用JavaScript写的3D旋转效果
下一篇: Hello,Flex!
facepp
博客等级 码龄22年 342粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值