- 浏览: 7189103 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
Struts2的类型转换是基于OGNL表达式的.有良好的扩展性.
WEB应用接收到表单提交的数据都是String类型的,Struts2可方便的转换为 常规类型(数值,日期) / 自定义类型(User,Point类).
如果转换中出现异常,conversionError拦截器会自动处理该异常.
----------------------------------------------------------------------------------------------------
一, 常规类型的转换:
比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别是 String, Date, int. 没什么好说的, Struts2会自动完成.
Struts2内建了常用的类型转换器,如String ,boolean,char,int,long,float,double,Date, 数组(假定元素是String类型), 集合(假定元素是String类型,用ArrayList封装)
二,自定义类型的转换(方法一): 这种方法用用来转换复杂对象
ONGL项目中有一个TypeConverter接口,是实现转换器必须实现的接口,这个接口有点复杂,所以OGNL还提供了该街接口的一个实现类ognl.DefaultTypeConverter , 通过继承该类重写convertValue方法 ,实现自定义类型的转换 .
方法是这样的convertValue(final Map context, final Object value, final Class toType)
第一个参数:context 是类型转换环境的上下文
第二个参数 : value 是须要转换的参数,方向不同,value的类型也是不同的.
第三个参数 : toType是转换后的目标类型,
返回值是 : 转换后的目标类型, 方向不同,类型也是不同的.
Struts2自己有一个抽象类继承自 DefaultTypeConverter类,是StrutsTypeConverter .就是转换的两个分别对应两个抽象方法, 其实都一样,换汤不换药,百变不离其中.所以我们也可以继承 StrutsTypeConverter类.
下面做一个自定义类型转换的实例:
1. 表单是这样的: 输入一个用 豆号分隔的两个数字, 代表一个坐标点的X,Y值 .
2.Point 对象如下 ,用来封装表单信息.
package ssh.org.util; public class Point { private int x; private int y; }
public class LoginAction extends ActionSupport { private Point point; set,get方法略... @Override public String execute() throws Exception { return "success"; } }
3.实现自定义类型转换器 ,我们自己写一个转换类PointConverter
package ssh.org.util; import java.util.Map; import ognl.DefaultTypeConverter; public class PointConverter extends DefaultTypeConverter { @Override public Object convertValue(final Map context, final Object value, final Class toType) { if (Point.class == toType) //从表单字符串转换为 Point对象 { final Point point = new Point(); final String[] str = (String[]) value; final String[] param = str[0].split(","); final int x = Integer.parseInt(param[0]); final int y = Integer.parseInt(param[1]); point.setX(x); point.setY(y); return point; } if (String.class == toType) //从对象转换为字符串 { final Point point = (Point) value; final int x = point.getX(); final int y = point.getY(); final String result = "[x=" + x + ",y=" + y + "]"; return result; } return null; } }
4. 把上面的类型转换器PointConverter注册在struts2应用中,Struts2框架才可以正常使用该 转换器.
有3种方法,任选其中一种就行 .
1) 注册局部类型转换器 , 假定请求的LoginAction 来处理 , 我们就要篇写 LoginAction-conversion.properties文件 .本文件要与LoginAction.java放再同一文件夹
#本文件名是:LoginAction-conversion.properties #注册局部的类型转换器的属性文件, 只针对指定名称的Action起作用 #文件名必须 是action类名 + -conversion.properties #指定LoginAction的point属性由ssh.org.util.PointConverter类完成转换,point是成员属性,不是类 #本文件要与LoginAction.java放再同一文件夹 point=ssh.org.util.PointConverter
2) 注册全局类型转换器 .
#本文件名是 xwork-conversion.properties #注册全局的类型转换的属性文件 , 对所有有ssh.org.util.Point类型成员属性的Action都起作用 #文件名必须是 xwork-conversion.properties #该文件放在classPath根路径,也就是src包下面,与struts.xml再一起 #指定ssh.org.util.Point类(带包名) 的类型类转换器为ssh.org.util.PointConverter ssh.org.util.Point=ssh.org.util.PointConverter
3) 使用JDK1.5的注解 来注册类型转换器,目前还无例子, 暂时略...
5 结果页面 success.jsp :
点对象point:<s:property value="point"/><br>
三,自定义类型的转换(方法二): 这种简单,不须要自己写类型转换器,不用写转换器注册文件* -conversion.properties .
1 表单是这样地: 第一个文本框是X坐标,第二个文本框是Y坐标, 与方法二中一个文本输入x,y不同了.
<form action="login.action" > point3.x:<input type="text" name="point3.x"/> point3.y:<input type="text" name="point3.y"/> <input type="submit" value="提交"/> </form> login.action是class LoginAction类在struts.xml配置的name
2 LoginAction 类
public class LoginAction extends ActionSupport { private Point point3; set,get方法略... @Override public String execute() throws Exception { return "success"; } }
3 Point 对象如下 ,用来封装表单信息.
package ssh.org.util; public class Point { private int x; private int y; }
4 结果页面 success.jsp :
点对象point:<s:property value="point3"/><br>
--------------------------------------------------------------------------------------------------------
类型转换错误的处理
conversionError拦截器被注册在默认的拦截器栈中, 也是在struts-default.xml
<interceptor-stack name="defaultStack"> <!--类型转换错误的拦截器 --> <interceptor-ref name="conversionError"/> <!--数据校验的拦截器 --> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>
流程是:
1 转换出错
2 被 conversionError拦截
3 将错误信息放入ActionContext中
4 读Action的局部资源文件 Action名称.properties 取得单个字段(成员属性)的提示信息
5 跳转到input逻辑视图,显示提示信息 ,要struts.xml中 <result name="input">/login/login.jsp</result> 这要指定 input逻辑视图.
本例子,处理请求的action 名称为LoginAction.java.
LoginAction.properties 文件 必须与LoginAction.java同名(扩展名不同) ,并放在同一文件 夹内
#局部资源文件 #文件名为LoginAction.properties, #必须与LoginAction.java同名(扩展名不同) ,并放在一起 # invalid.fieldvalue.成员属性=提示信息 invalid.fieldvalue.point=输入坐标不正确 invalid.fieldvalue.point2=输入坐标不正确 invalid.fieldvalue.point3=输入坐标不正确 invalid.fieldvalue.birthday=生日不正确
结果1 下面的表单是用Struts2标签写的, 出错误时,会自动显示错信息:
结果2 下面的表单是用HTML标签写的, 显示错误信息要加<s:fielderror ></s:fielderror>标签 :效果如下:
-----------------------------------------------------------------------------------------------------------
附件中是总个工程文件 ,包括上面的演示代码, 由于jar包较少,打包后大小为2M,就全打包上传了. 开发环境 Eclipse 3.3 + 支持属性文件中文自动编码的插件(忘记名称了)
发表评论
-
Struts2 通过"流"下载文件时显示中文文件名
2010-04-10 22:47 5836Struts2 通过"流"下载文件时对结果 ... -
JSONplugin 下载
2009-03-29 10:44 5526地址是: http://code.google.com/p/j ... -
如何在log4j中设置属性把struts2的debug信息去掉
2009-03-28 19:23 12096struts2 在发开时,控制台如输出大量信息,太烦人了 ... -
由Spring管理的Struts2的Action的全程安全问题
2009-03-28 18:57 17300Struts2的Action的线程安全 ... -
Struts2通用的Action配置
2009-03-28 14:03 3611struts.xml 配置一个<action/> ... -
Struts 2中的OGNL
2009-03-28 11:29 2221转自: http://www.blogjava.net/max ... -
常用的Struts 2.0的标志(Tag)介绍
2009-03-28 11:26 1840转自:http://www.blogjava.net/max/ ... -
struts2开发注意事项
2009-03-28 10:30 2582我有一个index.jsp , 是全部的首页, 内容如下 : ... -
12 struts2拦截器
2009-03-19 11:47 2804自己写拦截器, 要认识下面接口 与 类 com.op ... -
11 动态代理的例子
2009-03-18 18:15 1772结构如下 : package com.client ... -
10 一个通用的跳入jsp视图的方法
2009-03-17 12:15 2141后注: 以有新的解决方法,请见 Struts2通用的Actio ... -
9 动态调用Action与Action中方法(二)
2009-03-17 12:02 2318其实有 8 动态调用Action与Action中方法(一) ... -
8 动态调用Action与Action中方法(一)
2009-03-17 11:03 3991Struts1 提供了DispatchAction 实现一个A ... -
7 Struts2输入校验(二)----验证框架
2009-03-17 11:02 3378一 文件名约定: 1) 验证XML的文件名: Acti ... -
6 addActionError与addFieldError
2009-03-17 09:21 6687前面的第5讲中用到了addFieldError, 所以这里就 ... -
5 Struts2输入校验(一)----validate方法-validateXxx方法
2009-03-08 16:32 10073这是一种编码校验的方 ... -
4 Struts2类型转换(二)----集合类型
2009-03-08 14:32 2348情况一 : HTML复选框 与 List<Stri ... -
2 Struts2的优点与Struts1的区别:
2009-02-28 08:52 4855单实例与多实例有状 ... -
1 struts2标签的定义文件 struts-tags.tld
2008-08-10 15:59 10690在工程中使用struts2标签 一、 struts ...
相关推荐
理解并掌握如何利用内置转换器、自定义转换器以及处理转换错误,对于构建高效、稳定的Struts2应用至关重要。通过深入学习Struts2的源码和使用相关工具,我们可以更深入地了解这些机制,并优化我们的应用程序。
无论是Struts1还是Struts2,自定义类型转换器都是一个非常实用的功能,它允许开发者根据具体需求定制数据转换逻辑,从而提高程序的灵活性和可维护性。在实际开发过程中,选择合适的转换策略并正确实现转换逻辑是非常...
本文将深入探讨Struts2自定义类型转换的原理、分类以及具体实施步骤,帮助开发者更好地理解和应用这一功能。 #### 自定义类型转换原理 Struts2框架内置了一套类型转换系统,能够自动将前端表单提交的字符串数据...
3. **处理日期格式**:在自定义转换器中,我们需要解析前端传递的日期字符串并转换为Date对象。这通常涉及到日期格式化。可以使用`SimpleDateFormat`类来完成这个任务。 ```java try { SimpleDateFormat formatter...
在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...
Struts2作为一款流行的Java Web框架,其在处理用户输入数据时扮演着重要角色。...在练习中,你可以尝试创建不同的自定义转换器,并理解它们在处理不同类型数据时的作用,从而加深对Struts2数据处理机制的理解。
通过以上步骤,你可以在Struts2应用中有效地处理类型转换错误,尤其是时间转换错误,提高用户体验,并防止因为这类错误导致的程序崩溃。这需要对Struts2的配置、拦截器机制以及异常处理有深入理解。
总的来说,Struts2的类型转换机制为开发者提供了灵活的输入数据处理方式,既可以利用内置转换,也可以自定义转换器以适应复杂的业务场景。正确理解和使用这一机制,可以提高代码的可维护性和用户体验,确保数据的...
3. 集成了Jackson库:默认情况下,Struts2 JSON Plugin使用Jackson库进行JSON序列化和反序列化,Jackson是一个高性能的JSON处理库,提供了丰富的API和灵活性。 4. 异常处理:在出现异常时,插件可以自动捕获并返回...
3. 如果注解没有提供转换器,Struts2会搜索`struts-default.xml`和应用的`struts.xml`配置文件,查找`<conversion>`元素来定义转换器。 4. 如果仍然没有找到,Struts2会尝试使用JavaBeans的`PropertyEditor`机制进行...
自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....
在Struts2中,结果类型(Result Type)是动作执行后处理结果的关键部分,它决定了如何将控制权转移给下一个资源,如JSP、FreeMarker模板或者重定向到其他URL。自定义结果类型允许开发者根据项目需求定制化结果处理...
struts2-ssl-plugin-1.2.1.jar
3. **JSON插件配置**:在`struts-plugin.xml`配置文件中,会注册JSON插件,声明结果类型和其他相关设置,如启用GZIP压缩、排除某些字段等。 4. **拦截器**:Struts2的拦截器机制允许在Action调用前后执行特定逻辑。...
Struts2是一个强大的MVC框架,它在处理用户请求时涉及到数据类型的转换,这在处理复杂的表单数据或者自定义对象时尤其重要。本篇文章将详细介绍如何在Struts2中进行配置与自定义类型转换。 首先,Struts2的配置主要...
接着,当Struts2接收到相关参数时,会自动调用自定义转换器进行转换。 6. **调试与测试** 调试自定义类型转换器通常涉及到设置断点,观察转换过程中的变量状态,以及通过单元测试确保转换逻辑的正确性。在IDE如...
总之,Struts2的类型转换机制提高了开发效率,通过自定义转换器,我们可以灵活地处理各种数据类型,确保用户输入能够正确地转换为应用程序可处理的形式。`MyTypeConverter`这个文件可能就是你为特定需求创建的一个...
在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...
Struts2-Spring-Plugin-2.3.4.jar 是一个专门为 Struts 2 框架和 Spring 框架整合而设计的插件,主要用于处理 Struts 2 和 Spring 之间的集成问题。在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖...