8.Struts2类型转换器
类型转换器
1、引入
在Struts2中,请求参数类型不仅可以是String,还可以是其它类型。
如,定义一个请求参数birthday为Date类型,给其赋值为1949-10-1,
则birthday接收到的不是字符串“1949-10-1”,而是日期类型。
但,需注意的是,对于基本数据类型,需将其定义为包装类型。
实例:请求参数值的类型-- typeconverter
Step1:编写index.jsp与show.jsp
Step2:编写Birthday_Action
Step3:编写web.xml与struts.xml
新建web项目工程源码文档目录如下:
Birthday_Action.java源码如下:
package actions;import java.util.Date;public class Birthday_Action {private Date birthday;public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String execute(){System.out.println("--------birthday------"+birthday);return "success";} }
index.jsp源码如下:
<%@ page pageEncoding="utf-8"%><html><head><title>login.jsp</title></head><body><form action="birthday.action">中华人名共和国的建国日期是:<input type="text" name="birthday"/><br/><input type="submit" value="提交"/></form></body> </html>
show.jsp源码如下:
<%@ page pageEncoding="utf-8" isELIgnored="false"%><html><head><title>show page</title></head><body>中国人民共和国的建国日期是:${birthday}</body> </html>
web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>
struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="one" extends="struts-default"><action name="birthday" class="actions.Birthday_Action"><result>/show.jsp</result></action></package> </struts>
部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/typeconverter/
说明,Struts2将1949-10-1作为Date类型接收了。
http://127.0.0.1:8080/typeconverter/
那么,如何能够让Struts2将19491001当作Date类型?
类型转换器自定义类型转换器类,是继承自com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter类的。在使用时,一般需要覆盖其父类的方法public Object convertValue(Map<String, Object> context, //OGNL表达式上下文Object value, //待转换的值Class toType //要转换为的类型 )注意:定义convertValue方法时需要注意,其转换一般是定义为双向的。
实例步骤:在上例中定义类型转换器类:typeconverters.Date_String_Converter需要注意第二个参数value,若转换方向为从请求到action,则value为字符串数组。因为请求中是允许携带多个同名参数的,而这时的这个同名参数,其实就是数组。Struts2为了兼顾到这种多个同名参数的情况,就将从请求到action方向的转换的value指定为了String[],而非String。在定义好类型转换器后,需要注册该转换器,用于通知Struts2框架在遇到指定类型变量时,需调用类型转换器。
具体解决方法:
在原有代码基础上新建继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter类的String_Date_Converter.java。
String_Date_Converter.java完成源码如下:
package typeconverters;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map;import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;public class String_Date_Converter extends DefaultTypeConverter {@Overridepublic Object convertValue(Map<String, Object> context, Object value,Class toType) {//MM代表两位数的月,不可以小写,小写mm就成了两位数的分SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");try {if(toType==Date.class){String[] params=(String[]) value;//将字符串解析为日期类型return sf.parseObject(params[0]);}else if(toType==String.class){//注意这里导入import java.util.Date;Date date=(Date)value;//将日期类型格式化为指定格式的字符串return sf.format(date);}} catch (ParseException e) {// TODO Auto-generated catch block e.printStackTrace();}return null;}}
根据注册方式的不同及其应用范围的不同,可以将类型转换器分为两类:1.局部类型转换器2.全局类型转换器局部类型转换器局部类型转换器,仅仅对指定Action的指定属性起作用。注册方式:在Action类所在的包下放置名称为如下格式的属性文件:ActionClassName-conversion.properties文件。其中ActionClassName是Action类名,-conversion.properties是固定写法。就本例而言,该注册文件的名称应为BirthdayAction-conversion.properties 。此文件的内容也遵循一种格式:属性名称=类型转换器的全类名对于本例而言,文件中的内容为:birthday=typeconverters.Date_String_Converter注册方式:在actions包中新建属性文件BirthdayAction-conversion.properties。全局类型转换器全局类型转换器,会对所有Action的指定类型的属性生效。注册方式:在WEB-INF/classes下,即在src目录下放置名称如下的属性文件xwork-conversion.properties。该文件的内容格式为:待转换的类型=类型转换器的全类名。
重新部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/typeconverter/
注意:这时候1949-10-01提交就会错误,要想实现19491001和1949-10-01都可用,只需多定义几个转换器即可。
全局类型转换器:
重新部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/typeconverter/
转载于:https://www.cnblogs.com/xingyunblog/p/4008105.html
8.Struts2类型转换器相关推荐
- struts2类型转换器
页面输入data类型字符串 转换成data类型 jsp页面 <s:form action="conversion"><s:textfield name=" ...
- Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证
一.自定义类型转换器 1.编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter 2.覆盖掉其中的public Obj ...
- Struts2(批量类型转换器struts2.3.4)
批量类型转换器 package com.wildcat.converter;import java.util.ArrayList; import java.util.List; import java ...
- Struts2下创建自定义类型转换器(表单中日期的处理)
在表单提交中需要有日期的输入,默认的Struts2处理机制可能不能满足需求,需要自定义一下类型转换器.如: String----->java.util.Date:输入 java.util.Dat ...
- struts2学习笔记之十一:struts2的类型转换器
Struts2的类型转换器 如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString 注册类型转 ...
- Struts2之类型转换器
一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...
- Struts2自定义类型转换器
重要重要:以后一定要导对包,到错了一个包纠结了一天重点内容 一.Struts2中有自带类型转换器也有自定义类型转换器 1)比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别 ...
- struts2教程:12、自定义类型转换器
自定义类型转换器 有两种:1.局部.2.全局 java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值.但如果我们需要接收格式为20091221的请求参数,我们必须定义类型 ...
- Struts2中自定义类型转换器
Struts2虽然提供了强大的类型转换机制,但是有的情况还是需要程序员手动去转换. 同样拿经典的用户登录功能: <h2>局部类型转换器</h2><s:form actio ...
最新文章
- 2022-2028年中国遇水膨胀橡胶行业市场研究及前瞻分析报告
- 这个新型AI电子器件没有硅!北航32岁教授共同一作,能模拟大脑神经元,还登上了Science...
- 设计模式学习笔记——目录
- OpenCV学习笔记(十六):直方图均衡化:equalizeHist()
- 201521123063 《Java程序设计》 第7周学习总结
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 工作资讯001---行业思维模式及经典语录随时更新
- AI换脸APP“ZAO”刷屏并一夜爆火,它能红多久?
- c语言复制粘贴快捷键_C++小知识:复制粘贴代码千万要小心
- python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
- SQL语句批量替换某个指定的字符串
- 如何生成随机验证码图片
- SPI 接口驱动电路设计
- u盘坏了在计算机不显示,U盘在电脑上不能显示怎么办
- 计算机基础知识学习总结
- C语言实现定积分的计算
- 微信开发 没有认证过的服务号怎么办?微信提供了测试号(开通了认证过的服务号的功能)
- 没有躲过的坑--string中的c_str()陷阱
- 家庭服务器 作用,家庭网络存储服务器四大主要功能
- 天狼星-冬季大三角最亮的一颗星
热门文章
- 浏览器控制台执行代码_JavaScript 和 浏览器那些事
- JZOJ 3813. 【NOIP2014模拟9.7】我要的幸福
- java代码逻辑讲解_java逻辑控制语句实例详解
- 2能不用cuda_cuda学习-1-cufft的使用
- send函数 获得已发送数据长度_蓝牙BLE开发1--起因与回调函数
- C#socket之TCP开发详解(一)
- 粒子群(PSO)算法简介
- python处理pdf实例_python 使用pdfminer3k 读取PDF文档的例子
- Vue组件基础知识总结
- mybatis04--Mapper动态代理实现