Struts2的类型转换是基于XWork的,实际上是基于OGNL的,它是一种强大的表达式语言
Struts2主要是通过实现OGNL类中的TypeConverter接口的方式,来完成类型转换
而该接口比较复杂,它只是描述了最通用的一种情况,所以通常都不会直接实现该接口
OGNL本身又提供了一个实现了TypeConverter接口的类,即DefaultTypeConverter类
我们的类直接继承DefaultTypeConverter类,然后重写它的convertValue()方法即可
DefaultTypeConverter类提供了两个convertValue()方法
convertValue(Map context, Object target, Member member,String propertyName, Object value, Class toType)
convertValue(Map context, Object value, Class toType)
其中第二个方法是对第一个方法的一种简化,我们只需要重写第二个比较简便的方法就可以了
而Struts2本身也是通过对convertValue()方法的重写,来实现数据的类型转换的
参数Map类型的context代表应用的上下文。这个参数暂时还用不上
参数Object类型的value代表需要进行类型转换的值
参数Class类型的toType代表所要转换成的目标类型
通常有两种情况的类型转换。第一种情况是从客户端的字符串到自定义类型的转换
第二种情况是在页面中输出内容的时候,从自定义类型到String的一个转换
故toType决定了到底是从String到自定义类型的转换,还是从自定义类型到String的转换
所以这里的toType分为两种情况,也就需要在convertValue()方法中对toType进行判断
Struts2也内置了一个简化的类型转换,即org.apache.struts2.util.StrutsTypeConverter类
它是一个抽象类,它继承了ognl.DefaultTypeConverter类
它有一个converFromString(Map context, String[] values, Class toClass)方法
用来将字符串类型转换为一个对象类型,所以它的返回值为Object类型
还有一个converToString(Map context,Object o)方法,用来将对象类型转换为String类型
而实际项目开发中的自定义数据类型转换,也是通过继承StrutsTypeConverter类实现的
定义PointAction-conversion.properties属性文件
该文件用于指定对PointAction的属性进行类型转换的属性文件,它应与Action位于同包中
在定义该属性文件时,-conversion.properties是固定的,然后在其前面指定具体的Action
然后在PointAction-conversion.properties指定对PointAction中的哪个属性进行类型转换
比如在该属性文件中增加该行代码point=com.jadyer.converter.PointConverter
这样Struts2就知道,我们是要使用PointConverter类对PointAction中的point属性进行转换
若需要对PointAction的多个属性进行转换,那么就在该属性文件中添加多行类似代码即可
Struts2的全局类型转换的属性文件
Struts2的全局类型转换的属性文件的文件名是固定的,即xwork-conversion.properties
该文件在整个应用中只能出现一个,并且它必须与struts.xml位于相同的目录下
它配置的内容例如com.jadyer.bean.Point = com.jadyer.converter.PointConverter
即指明整个应用的所有的Point类型的变量都使用PointConverter转换器进行转换
类型转换的具体流程
客户端提交表单之后,首先会到struts.xml中查找是否存在名为pointConverter的<action/>
找到了之后,就知道是由PointAction类的一个对象来处理我们的请求<
br />
此时流程就转到了PointAction中了,生成了PointAction的一个实例
当这个实例生成之后,它首先会根据提交过来的表单中的name属性来得到个输入域的值
然后把这些值一一的调用setter()方法赋给PointAction中的每一个属性
若它检查到没有定义自定义类型转换的属性文件时,便按照自己的默认行为进行类型转换
对于int、String、Date等,Struts2都会自动完成类型转换,但对象类型,则须手工转换
即如果它发现存在一个PointAction-conversion.properties文件的话
它就会到该文件中查找,是对PointAction中的哪个属性进行转换,以及对应的转换类
然后流程便切换到转换类中,按照转换类中的代码进行自定义的转换
最后将返回的值赋给PointAction中的该属性
当为PointAction的所有属性赋好值后,便执行execute()方法,于是转到了output.jsp中
接着就会调用<s:property/>中的value值所对应的getter()方法获取参数值
但是当进行point属性输出的时候,它又会去检查有没有对应point的自定义类型转换
结果发现有,则流程转到PointConverter中,最后将其返回值输出到<s:property/>的位置
分享到:
相关推荐
Struts2是一个流行的Java web开发框架,其核心是Action,而类型转换是Struts2处理用户输入数据的一个重要环节。Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、...
本篇文章将深入探讨Struts2中的类型转换机制。 1. **类型转换的概念** 类型转换是指将一个数据类型的值转换为另一个数据类型的过程。在网络请求中,用户输入的数据通常是字符串类型,而服务器端的Action类属性可能...
在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...
Struts2是一个强大的MVC框架,它在处理Web应用程序时提供了许多便利,其中包括类型转换功能。类型转换是将用户输入的数据自动转化为服务器端处理所需的类型,这样可以避免手动转换带来的繁琐工作。本篇文章将深入...
这篇博文深入探讨了Struts2类型转换的细节,以下是对这一主题的详细解读。 1. **Struts2类型转换的原理** 在Struts2中,类型转换是通过`ValueStack`和`TypeConverter`接口实现的。`ValueStack`负责管理Action对象...
### Struts2类型转换与验证流程详解 #### Struts2框架概述 Struts2是一个用于构建企业级Java Web应用的强大框架。它集成了MVC设计模式,并提供了丰富的插件支持和灵活的配置选项。在Struts2中,类型转换和验证机制...
在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...
struts2类型转换机制
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括类型转换、拦截器和校验机制。本文将深入探讨这些关键知识点,并通过实际例子来帮助你理解它们的工作原理和应用。 首先,我们来看看**类型转换...
在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...
《STRUTS2类型转换错误导致OGNL表达式注入漏洞分析》 STRUTS2框架在处理用户输入时出现的类型转换错误,可能导致OGNL(Object-Graph Navigation Language)表达式注入漏洞。此漏洞允许攻击者通过精心构造的输入,...
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
熟悉和掌握Struts2自定义类型转换。 熟悉和掌握Struts2内建校验的操作方法 实验环境与设备: 已经接入局域网的网络实验室,机器上装有IE浏览器等; strtus2.5.8 实验内容: (1) 编写一个...
在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...
Struts2是一个强大的MVC框架,它在处理用户请求时提供了丰富的功能,其中包括类型转换(Converter)。类型转换是Struts2框架中一个重要的特性,它允许我们把前端表单提交的数据自动转换为后端Java对象的属性。在这个...
在Struts2中,类型转换是一项关键功能,它允许框架将用户输入的数据自动转换为应用程序需要的特定数据类型。这篇博客文章可能是关于Struts2内部的类型转换机制及其使用的探讨。 在Struts2中,类型转换是通过`...