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

Struts 2 自定义日期转换器 然而,有时候默认的日期转换方式可能无法满足我们的需求,这时就需要自定义日期转换器。在本文中,我们介绍了如何创建自定义日期转换器类,并在 Struts 2 的配置文件中进行配置。然后,我们在 Action 类中使用自定义日期转换器,并通过表单提交数据进行测试。自定义日期转换器可以让我们根据自己的需求来处理日期参数的转换,例如指定日期格式、处理时区等。现在,我们可以在 Struts 2 的 Action 类中使用自定义日期转换器了。接下来,我们需要在 Struts 2 的配置文件中配置自定义日期转换器。 阅读详情

在表单提交中需要有日期的输入,默认的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
     */
    @Override
    public 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
     */
    @Override
    public 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拦截器负责处理的。

Struts2中日期、时间与数字格式化实战指南 为了增强功能,可在或struts.xml中注册常用工具类:并在启动类或插件中注册静态函数:// 注册工具类之后即可在 JSP 中使用:其中为自定义静态方法。特性描述表达式语法支持属性访问、方法调用、集合操作、三元运算符等上下文支持可通过访问 request、session、application、parameters 等静态方法调用需开启类型转换自动进行基本类型与包装类之间的转换安全限制。 阅读详情

相关推荐

AVL(Athena Vortex Lattice)如何编写与应用(一)

前两个是弦向的涡个数和以cos函数分布的间距参数(设为1即可)后两个可以在这里声明也可以写到后面的每一个section中,是展向的涡个数和以sin函数分布的间距参数。这个文件是用来建立飞机模型的文件,是一定要有的文件,其他的.run和.mass并不是必须要有的,甚至mass文件并没有看到有人在使用。Sref、Cref、Bref是飞机的参考面积参考弦长和参考的展长,我的理解就是所设计飞机的S,c,b这三个参数。———————————————以上是飞机的基本信息———————————————

dawangaa的博客 1510

STRUTS2中的日期处理

1.Struts2中的日期的格式化: 在struts2中,提供了&lt;s:date.../&gt;标签,可以很方便地处理日期。有了这个标签,就可以随意地以各种方式来格式化日期,如指定日期格式为“dd/MM/yyyy hh:mm”,或者是自定义可读性强的日期格式“2 hours 14 minutes”,或者使用在properties文件中预先定义好日期格式。 s:date标签共有四个属性,id,n...

冰月无霜 279

Codex辅助小说创作:零成本AI写作指南与实战技巧

自然语言处理技术通过深度学习模型理解语义上下文,其核心原理是基于大规模文本训练的语言模型预测能力。在创意写作领域,这项技术的价值在于突破传统写作工具的功能局限,实现从内容生成到风格模仿的智能化辅助。特别是提示词工程的应用,让创作者能够精准控制AI输出的内容和风格。在实际应用场景中,AI写作工具显著降低了小说创作门槛,适用于网络小说、奇幻科幻等多种文学类型。本文以OpenAI Codex为例,详细解析如何利用AI技术完成从故事大纲设计、章节生成到平台发布的全流程创作,其中提示词优化和内容质量把控是提升生成效果

weixin_32678995的博客 568

struts2接收字符日期存到数据库

模拟51job招聘网站出现的小插曲。   1、注册时候的信息,和简历里面的真实信息不能一样。 2、人员表需要新增一个真实姓名,因为时候的用户名不能用作简历里面的姓名。 3、strus2 el表达式再页面显示值时候不用引入实体类,提交时候也不用引入实体类但是应和action里面定义的实体类对象名字相同。   4、进行修改操作时候,查询出来的信息在页面上显示,之后提交表单,但是提交的信息不...

woshixushigang的专栏 265

SAP生产订单成本‘还原’实战:从标准成本到实际费用,一步步拆解差异来源(附物料分类账提示)

本文深入解析SAP生产订单成本差异分析的全过程,从标准成本到实际费用的追踪方法,揭示差异根源的六维分析法。特别强调物料分类账(CKMLCP)在成本还原中的关键作用,帮助财务人员精准定位价格差异、用量差异等问题,提升制造业成本管理的效率和准确性。

weixin_28705087的博客 535

UE5 蓝图节点图文大全(300+蓝图,9万字+)

本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,包括蓝图节点的输入输出参数解释,并有中英文节点名称可参考。

一碗清深的博客 2万+

struts2时间格式

<br />1.<br /><s:textfield id="examBeginDate" name="initSet.examBeginDate"<br />       onclick="WdatePicker({lang:'cn',dateFmt:'yyyy-MM-dd',isShowClear:false,minDate:'%{@java.lang.String@format('%tF',initSet.examBeginDate)}',maxDate:'%{@java.lang.String@fo

weirhp的专栏 1095

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1916

java中struts2日期_Struts2中Date日期转换的问题

今天跑程序的时候莫名其妙的出现了下面的一个异常:java.lang.NoSuchMethodException:com.ca.agent.model.mybatis.ApprovalInforCangra.setSubDate([Ljava.lang.String;)这类异常信息在以前是处理过的,按照以前的思路在eclipse的调试模式下看看具体的情况,不过这次比较奇怪,根本没进入到对应的Acti...

weixin_39908948的博客 200

YOLOv13结合Sobel边缘检测算子,实现EIEM(Edge Information Enhancement Module,边缘信息增强模块),强化空间特征提取

EIEM模块通过巧妙地结合Sobel边缘检测算子和现代卷积网络架构,实现了显式边缘信息增强的创新设计。这种方法不仅提高了网络对边缘特征的敏感性,还保持了良好的计算效率和模块化特性。 从技术实现角度看,EIEM展示了如何将经典计算机视觉算法无缝集成到深度学习框架中,为构建更强大、更可解释的视觉模型提供了新的思路。随着对边缘信息重要性认识的不断深入,以及对网络可解释性需求的增长,EIEM这样的显式特征增强模块将在未来的计算机视觉研究中发挥越来越重要的作用。

FJN110的博客 908

【知识分享】高速印刷电路板(PCB)寄生参数计算指南

对于高速PCB设计而言,寄生参数一直是令人讨厌的问题,它们会悄悄潜入PCB并在电路中造成严重的破坏,具体来说,它们是渗透到高速电路中的隐藏杂散电容器和电感器,包括由封装引线和长走线形成的电感器、PCB焊盘对金属平面形成的电容器、走线之间形成的电容器等等。

一只豌豆象的博客 1784

关于Struts2框架的日期转换问题

**问题起源:**在学习Struts2框架 的时候,运行一个小demo,出现下述异常 经检查得知是form表单提交的数据中数据类型转换出错,具体就是form表单中有各种格式的日期数据,而在Action用Date类型变量去接收(上述异常也可能因其他问题导致,本例是日期转换问题) 解决方案: **方案一:**如果form表单的日期数据是固定值,且之后不用于其他操作,可以在Action类中用Strin...

Yang520Fang的博客 365

知识图谱:综述

第一种理解:知识图谱本质上是语义网络。本体论是语义网络中最重要的一个要素。第二种理解:知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成。课程以第二种理解为主。

u013250861的博客 480

struts2的Date日期类型转换器

Struts2 对Date数据类型的转换器    在B/S结构的框架中,常常会遇到一个问题,即底层对象的属性类型为Date(例如:对象Users的birthday属性),而在前台想将birthday(即Date类型的数据)通过表单传到后台时,便会出现一个类似无法将"[java.lang.String"转换为指定的数据类型的错误。       而这种错误出现的原因是因为,我们定义数据类

majian_1987的专栏 4440

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

struts2自定义类型转换器

struts2能对java中八大基本类型以及String、Date等常用类型提供自动转换,Date类型转换时仅支持yy-MM-dd的格式转换。jsp页面提交数据时所有的数据均为字符串类型,这时我们需要把字符串转换为相应的数据类型。 局部类型转换器:对某个action转换类型起作用。 全局类型转换器:对所有action转换类型起作用。 首先编写Action,假定要转换的类型为date类型,

码农小札 421

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

struts2 基于OGNL的几种日期转换

本篇解决的问题有:struts2内置的类型转换有哪些?OGNL是什么,它的两个作用,还有基于OGNL的常见日期类型转换。

!巴普洛夫的狗的博客 1360

struts--自定义类型转换器---日期格式

自定义类型转换器---日期格式的问题 Struts2中数据类型转换实际上是依赖于OGNL实现的,OGNL提供了TypeConverter接口,可以自定义实现这个接口实现自定义数据类型转换器。OGNL为了方便自定义扩展提供了一个类DefaultTypeConverter,这个类中提供了类型转换方法,可以覆盖定义 public Object convertValue(Map context上下文,...

SEAMON_LOVE的博客 483

【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的日期时,Struts2框架可以自动转换;当格式为yyyyMMdd时用类型转换器来处理。1、局部类型转换器public class DateTypeConverter extends DefaultTypeConverter {  @Override  public Objec...

liberty12345678的专栏 187

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

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

ld513508088的专栏 2678

struts2类型转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 ognl的api地址: http://www.opensymphony.com/ognl/api/ ognl源码在网上自行下载,我是在csdn里下的   1.      struts2内部支持的类型转换 参考 http://ejb3.blogbus.com/logs/22922214.html http://www

cczioui的专栏 349

自定义类型转换器

struts2自定义类型转换器

1247

Struts2自定义类型转换器

java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。   import java.util.Date; public class HelloWorldAction { private Date createtime;   public D

xuenandong的专栏 349

Struts2的练习——1.日期格式转换器

1.日期格式转化器 利用struts2写一个日期转换器,把表单填写的日期格式1999-1-1转换成1999/1/1。 login.jsp: &lt;%@ page language="java" import="java.util.*" pageEncoding="GBK"%&gt; &lt;% String path = request.getContextPath(); String ba...

qq_38268534的博客 293

Struts2自定义类型转换

在Struts2中提供了StrutsTypeConverter类来简化自定义类型转换的设计,这个类有两个抽象方法需要实现:      (1) public Object convertFromString(Map context,  String[] values,  Class toClass) ;           用于String类型数据转成自定义类型的处理方法          

JAVA_LiShaonan的专栏 1018

自定义类型转换器(转换器的注册方法)

类型转换拦截器:把参数转换为action使用的格式,从客户端传过来的任何数据都是字符串类型的,struts2提供了一些转换器,如:字符串转整数,字符串转集合,字符串转日期。然而有些类型struts2并不能帮我们转换。这时需要自定义类型转换器。字符串转各种类型的工程下载地址如下:自定义类型转换器:1.写一个类型转换器://这是一个java.awt.Point的类型转换器package com.xie.convertors;import java.awt.Point;import com.opensymphon

centre10的专栏 3796
上一篇: 配置struts.xml时extends="struts-default"会报错,原因和解决
下一篇: Android中ImageView的scaleType 属性说明。
JSON_ZJS
博客等级 码龄9年 30粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值