`

Struts2day03OGNL自定义类型转换

 
阅读更多

  Struts2.0框架不能够或者不能完整的进行自动类型转换时采用自定义类型转换
  自定义类型转换器
    1.开发一个类,extends StrutsTypeConverter
    2.配置文件,声明自定义类型转换器

 


      一. 局部的类型转换器:
       配置文件的名称: actionName-conversion.properties
       配置文件的位置: 和Action放在同一个目录结构当中
       配置文件的内容: Action中需要类型转换器的属性=自定义类型转换器的全路径

 

1.在com.jsu.struts2.action包中写一个类extends StrutsTypeConverter

       在DateConverter.java文件中

package com.jsu.struts2.action;

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

import org.apache.struts2.util.StrutsTypeConverter;

public class DateConverter extends StrutsTypeConverter {

    @Override
    public Object convertFromString(Map context, String[] values, Class toClass) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        Date d = null;
        String dateStr = values[0];//用户提交的数据
        try {
            d=sdf.parse(dateStr);
           
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }

    @Override
    public String convertToString(Map context, Object obj) {
        Date d =(Date)obj;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        String dateStr=sdf.format(d);
        return dateStr;
    }

}

 2.reg.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> </head>
  <body>
     <center>
   <form action="add.action" method="post">
   userName:<input type="text" name="username"/><br>
   Age:<input type="text" name="age"/><br>
   Birthday:<input type="text" name="birthday"/><br>
   <input type="submit" value="Submit"/>
   </form>
   </center>
  </body>
</html>

 3.在com.jsu.struts2.action包中写一个Action RegisterAction extends ActionSupport

    在RegisterAction.java文件中

package com.jsu.struts2.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	private String username;
	private String age;
	private Date birthday;
	@Override
	public String execute() throws Exception {
		System.out.println(username+" : "+age+" : "+birthday);
		return SUCCESS;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

 4.在和Action同一目录结构当做写配置文件,配置文件命名actionName-conversion.properties

   配置文件的内容: Action中需要类型转换器的属性=自定义类型转换器的全路径

  在RegisterAction-conversion.properties配置文件中

birthday=com.jsu.struts2.action.DateConverter

 5.在struts.xml文件中

<struts>
	<package name="loginDemo" namespace="/" extends="struts-default">
		<action name="add" class="com.jsu.struts2.action.RegisterAction">
			<result type="redirect">/reg.jsp</result>
		</action>
	</package>
</struts>
 

二、 全局的类型转换器
           配置文件的名称: xwork-conversion.properties
           配置文件的位置: 在src目录下面
           配置文件的内容: 需要进行类型转换的类型=自定义类型转换器的全路径
           局部类型转换:只针对某一个Action的某一个属性进行转换
           全局类型转换:对所有Action对象中该类型的属性进行转换

在 xwork-conversion.properties配置文件中

java.util.Date=com.jsu.struts2.action.DateConverter

 以上其他内容都一样,只改变配置文件

分享到:
评论

相关推荐

    Struts2大全

    - "day34_struts03"则可能深入到更高级的主题,如自定义拦截器的编写、XML文件验证的实践、自定义类型转换器的实现,以及文件上传功能的集成。此外,可能会讲解如何实现国际化,包括创建资源文件和在视图中使用。 ...

    struts2学习 源码

    8. **类型转换**:Struts2自动处理HTTP请求参数到Action字段的类型转换,减轻了开发者的工作负担。 9. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用中的异常,提高代码的健壮性。 10. **国际...

    freemarker总结

    2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ...

    ChromeOS镜像文件.zip

    目录: ChromeOS-PC-20130222-oscome.com ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144 ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144-VirtualBox ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144-VMWare ChromeOS-virtualbox-20130222-OSCOME.COM ChromeOS-vmware-20130222-OSCOME.COM 网盘文件永久链接

    ieee33节点matlab模型

    IEEE33节点模型搭建,matlab

    3GPP R15 38.331 5G NR无线资源控制(RRC)协议规范解析

    3GPP R15 38.331 5G NR无线资源控制(RRC)协议规范解析

    基于ssm+mysql实现的零食商城系统(电商购物).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款

    19考试真题最近的t44.txt

    19考试真题最近的t44.txt

    JSP基于SSH2新闻发布系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    19考试真题最近的t49.txt

    19考试真题最近的t49.txt

    19考试真题最近的t61.txt

    19考试真题最近的t61.txt

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充电站的总成本 (包括投资、运行和维护成本)和网损费用之和最小为目标,考虑了相关的约束条件,构造了电动汽车充电站最优规划的数学模型。 从34个位置中,选取7个充电站地址,进行选址优化 关键词:电动汽车;充电站;选址和定容 程序注释清晰,适合初学者学习 ,电动汽车; 充电站选址定容; MATLAB程序; 规划模型; 成本优化; 网损费用; 初学者学习; 程序注释清晰,基于MATLAB的电动汽车充电站选址定容优化程序:成本最小化与约束条件下的选址策略

    威纶通触摸屏图库模板程序:多尺寸适用,PS原文件可自由修改,便捷电气助手应用,威纶通触摸屏图库模板程序:多尺寸适用,PS原文件可自由修改,便捷电气助手应用,威纶通触摸屏图库模板程序(电气助手) 可直接

    威纶通触摸屏图库模板程序:多尺寸适用,PS原文件可自由修改,便捷电气助手应用,威纶通触摸屏图库模板程序:多尺寸适用,PS原文件可自由修改,便捷电气助手应用,威纶通触摸屏图库模板程序(电气助手) 可直接使用。 内附原图、PS原文件可自行修改 不同触摸屏,不同寸尺都可以使用 ,威纶通触摸屏; 图库模板程序; 电气助手; 直接使用; 原图; 修改; 兼容不同寸尺,威纶通触摸屏图库模板程序:电气助手,便捷编辑通用模板

    群辉引导7.2.2 最新 vmware workstation 已经帮忙转换好为vmdk文件 直接使用就可以

    修复 "保存'/opt/rr'的修改" 后 主菜单锁死问题. 修复 trivial 插件的语法错误. 修复 open-vm-tools 套件 缺失的 SOCKETS 驱动. 添加 vmtools 插件, 包含 qemu-ga & open-vm-tools. 4.1. 该插件会自动判断环境并启用对应的功能, 物理机也不用刻意删除该插件. 4.2. 新安装用户会默认选中, 升级用户如需要请手动添加该插件. 4.3. 如启用该插件, 请不要再在系统中安装套件. 修复 wireless 插件. 5.1. 修复 RR 下无线网络 IP 显示和刷新问题. 5.2. 修复 RR 下设置 SSID&PSK 后 DSM 下不驱动的问题. 5.3. 同步 RR 下的 SSID&PSK 到 DSM 下. 5.4. 修复 junior 模式下无线网络的支持, 已支持 无线网卡的 DSM 系统安装. (暂时不支持 intel 无线网卡) 5.5. wpa_supplicant.conf 文件位于引导盘第一个分区根目录, 纯无线环境可手动放置该文件后其启动引导.

    19考试真题最近的t66.txt

    19考试真题最近的t66.txt

    19考试真题最近的t37.txt

    19考试真题最近的t37.txt

    Arduino-Mega2560开发板-毕业设计

    Arduino_Mega2560开发板工程文件 包含 原理图 PCB图

    智能养猪系统的高精度称重算法及其Python实现(含详细可运行代码及解释)

    内容概要:本文详述了一种用于智能养猪的高精度称重系统设计及其实现方法,主要涵盖了卡尔曼滤波、数据采集与预处理、重量估算与存储等功能。文中提供了完整的Python代码示例和详细的代码解释,旨在减少噪声干扰并提高数据准确性。具体而言,通过对采集的数据进行卡尔曼滤波,去除异常值,并使用一定时间段内数据的平均值作为最终的体重估计。此外,还实现了一个简单的图形用户界面,能够实时显示称重数据和估计的重量。 适合人群:农业自动化领域的开发者和技术爱好者,尤其关注智能畜牧业的技术应用。 使用场景及目标:适用于智能养猪场的精准称重,提高养猪效率和管理水平,确保获取高精度、可靠的牲畜体重数据,帮助养殖场更好地管理饲养过程。同时,提供完整的源代码有助于相关人员理解和优化现有系统。 阅读建议:对于想要深入了解智能畜牧业相关技术的读者来说,可以通过本教程掌握从硬件接入、软件设计再到数据处理全流程的具体细节。重点关注各个关键算法的实现原理及其应用场景,从而为自己的项目带来启示与借鉴。

    基于SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款

Global site tag (gtag.js) - Google Analytics