Struts2下创建自定义类型转换器(表单中日期的处理)

在表单提交中需要有日期的输入,默认的Struts2处理机制可能不能满足需求,需要自定义一下类型转换器。如:
String----->java.util.Date:输入
java.util.Date------>String:输出:查询显示,输出错误回显
Struts2会按照**本地默认(与操作系统的区域有关yyyy-MM-dd)**格式自动转换
默认:yyyy-MM-dd-------java.util.Date转换
目标:实现MM/dd/yyyy<------>java.util.Date互相转换
类型转换器的根源、
1、在OGNL中有一个接口为TypeConverter
2、在WebWork中DefaultTypeConverter 实现了OGNL中的TypeConverter接口
3、在Struts2中的StrutsTypeConverter继承了WebWork中的DefaultTypeConverter类。
自定义类型转换器
1、编写一个类,继承StrutsTypeConverter

import org.apache.struts2.util.StrutsTypeConverter;
/*** 自定义类型转化*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;//实现MM/dd/yyyy 与date进行转换(输入日期)
public class MyDateConverter extends StrutsTypeConverter {SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");/*** String---->其他类型Date* @param map* @param values 用户输入的值* @param aClass 目标类型* @return*/@Overridepublic Object convertFromString(Map map, String[] values, Class aClass) {if (aClass != Date.class) {throw new RuntimeException("你输入的不是日期,请选择别的转换器");}if (values == null || values.length == 0) {throw new IllegalArgumentException("没有数据");} else {String sDate = values[0];if (!sDate.trim().equals("")) {try {return df.parse(sDate);} catch (ParseException e) {throw new RuntimeException(e);}}}return null;}/*** 其他类型Date---->string** @param map* @param o   对象* @return*/@Overridepublic String convertToString(Map map, Object o) {if (!(o instanceof Date)) {throw new RuntimeException("你的数据不是日期,请选择别的转换器");}Date date = (Date) o;return df.format(date);}
}

2、注册类型转换器
a、局部类型转换器:只为当前动作使用
1、动作类作为模型:在这里插入图片描述
2、动作类和模型分开:(经常用):
在模型所在的包中,建立以下配置文件(javabean的名称保持一致)在这里插入图片描述
b、全局类型转换器:所有动作使用
在构建路径顶端(src路径下),建立固定名称为xwork-conversion.properties的配置文件
内容为
java.util.Date=com.itheima.converter.MyDateConverter

二、类型转换失败后的提示
a、转换失败,会自动转到一个name=input的逻辑视图,一般指向输入的那个页面,目的回显(建议使用struts2的表单标签)
b、错误消息提示中文版本
前提:动作类继承ActionSupport才能使用

在自定义的类型转换器中,异常必须抛出不能捕获,converterError会处理该异常,然后转入名为input的逻辑试图
在Action所在地包中,创建ActionName.properties,在局部资源文件中配置提示信息 invalid.fieldvalue.属性名=错误信息
在input逻辑试图对应的jsp页面中,通过<s:fielderror/>输出类型转换信息。
如图
在这里插入图片描述
该功能是由一个叫做conversionError拦截器负责处理的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记

一.CI&#xff08;Continuous Integration&#xff09;简介 CI规则1&#xff1a;尽量频繁地把代码签入到分支中以进行集成 CI规则2&#xff1a;不光要对语法进行验&#xff0c;也要提供一系列的自动化来验证 CI规则3&#xff1a;CI失败后&#xff0c;要把修复CI当做第一优先级的…

使用ListView控件展示数据

一、使用ListView实现大图标小图标的功能&#xff1a; 1.拖一个ListView控件 2.拖两个imageList控件&#xff0c;并且重命名为imgBig和imgSmall,分别设置两个控件的图片和大小。 3.编辑ListView的Items&#xff0c;添加几项&#xff08;C、D、E盘&#xff09; 4.通过ListView绑…

React中的唯一标识key(用index VS id)和key的选择

1. 虚拟DOM中key的作用&#xff1a;1). 简单的说: key是虚拟DOM对象的标识, 在更新显示时key起着极其重要的作用。2). 详细的说: 当状态中的数据发生变化时&#xff0c;react会根据【新数据】生成【新的虚拟DOM】, 随后React进行【新虚拟DOM】与【旧虚拟DOM】的diff比较&#x…

Android中ImageView的scaleType 属性说明。

ImageView是Android中最常用的控件之一&#xff0c;在使用ImageView的时候&#xff0c;必不可少的会使用到scaleType属性&#xff0c;该属性指定了你的ImageView如何显示图片。包括是否进行缩放&#xff0c;等比缩放&#xff0c;缩放后显示的位置&#xff0c; Android中提供了八…

支付渠道参数如何设计成路由化配置

转载自 支付渠道参数如何设计成路由化配置 今天我们来探讨在搭建支付系统时一个比较关键的问题&#xff1a;渠道参数路由化配置如何设计&#xff1f; 在开发支付系统的时候&#xff0c;我们经常会涉及到对接多个支付渠道&#xff0c;除常见的支付宝、微信外可能还会根据不同的…

实现Windows程序的数据更新

一、枚举&#xff1a; 1.语法&#xff1a;public enum 名字{ 值1,值2} 2.eg:public enum Genders{Male,FeMale} 3.使用枚举&#xff1a;枚举名.值 4.枚举的好处&#xff1a; (1)使代码更易于维护 (2)更易于用户输入值&#xff0c;直接用.的方式就可以获取值 (3)使代码更清晰&a…

分布式数据访问服务之1—华山论剑篇

业界主流的互联网架构中&#xff0c;分布式服务框架、分布式数据访问服务、消息队列服务、服务网关(API)、分布式事务等都是核心的组件和框架。 当我们的系统规模越来越大&#xff0c;从几台服务器扩展到几十台、几百台、上千台&#xff0c;传统的烟囱式的、大集中式系统架构&…

Android中异步任务AsyncTask的使用

1、当程序启动的时候&#xff0c;Android同时会启动一个对应的线程&#xff0c;【主线程、UI线程】主要负责处理与UI相关的线程 2、UI线程不允许访问网络进行耗时操作 3、子线程不允许更新UI。 由于Android中主线程不能访问网络、子线程不能更新UI&#xff0c;需要线程间通讯 完…

漫画:什么是快速排序?(完整版)

转载自 漫画&#xff1a;什么是快速排序&#xff1f;&#xff08;完整版&#xff09; 同冒泡排序一样&#xff0c;快速排序也属于交换排序&#xff0c;通过元素之间的比较和交换位置来达到排序的目的。 不同的是&#xff0c;冒泡排序在每一轮只把一个元素冒泡到数列的一端&a…

测试——《微服务设计》读书笔记

一.测试象限&#xff08;Brain Marick&#xff09; 二.测试金字塔&#xff08;Mike Cohn&#xff09; 1.单元测试 通常只测试一个函数或方法调用&#xff0c;通过TDD或者基于属性而写的测试就属于这一类&#xff0c;在UnitTest中&#xff0c;我们不会启动服务&#xff0c;对且对…

React功能界面的组件化编码流程

功能界面的组件化编码流程&#xff08;通用&#xff09; 1.拆分组件: 拆分界面,抽取组件 2.实现静态组件: 使用组件实现静态页面效果 3.实现动态组件 3.1 动态显示初始化数据 3.1.1 数据类型 3.1.2 数据名称 3.1.2 保存在哪个组件? 3.2 交互(从绑定事件监听开始)

Java 多文件上传

转载自 Java 多文件上传 前台代码很简单&#xff1a; <input type"file" accept".zip" class"file-load" multiple"multiple" name"files"/> 后台代码&#xff1a; public boolean uploadFlow(RequestParam Mult…

MyKtv点歌系统前台主要功能实现,内附数据库脚本,可以直接运行

C#开发工具&#xff1a;Visual Studio 2012 数据库&#xff1a;Sql Server Windows版本&#xff1a;Win10 分辨率&#xff1a;1366*768 文章的最后有KTV点歌系统的前后台源码下载链接。 在正式写代码之前先看一下运行效果图&#xff0c;如果觉得这个是你需要的&#xff0c;那么…

Hibernate使用最新的MySQL8.+版本出现的问题!

目前所出现的问题 1、驱动包更新为 mysql-connector-java-8.0.12.jar 2、hibernate的配置文件hibernate.cfg.xml中使用 <property name"connection.driver_class">com.mysql.cj.jdbc.Driver</property>取代之前的 <property name"connection.d…

支持断线重连、永久watcher、递归操作 ZooKeeper 客户端

项目介绍 ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件&#xff0c;现在被拆分为一个Hadoop的独立子项目。 Zookeeper 作为一个分布式的服务框架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题&#xff0c;它能提供基于类似于文…

mongdb总结

#清屏 cls --windows #操作数据库 show dbs --查看所有数据库 use dbName --使用已有的dbName数据库&#xff0c;或者创建新的数据库dbName&#xff0c;如果一个数据库没有表就不存在 db --显示数据库名称 #操作集合 show collections …

JavaScript操作BOM简单案例

需要两个页面index.html和Test.html&#xff0c;可以直接运行&#xff0c;每个功能都已经注释完整&#xff0c;index.html页面的代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head…

Java中“/”,“.”所代表的文件路径

转载自 Java中“/”&#xff0c;“.”所代表的文件路径 我们在开发的过程中&#xff0c;经常会去读、写文件。在读写文件的时候&#xff0c;就不得不写文件的路径&#xff0c;使用相对路径的方式有两种&#xff1a;”/”和 “.” 。在写文件的路径的时候&#xff0c;需要了解一…