`

struts2对Ognl的封装--TypeConverter

 
阅读更多

Ognl的扩展点:

http://java12345678.iteye.com/blog/2031790

 

OGNL TypeConverter接口 :

     类型转换,setValue时将值转换为实际的类型,或getValue时将获取的对象转换为需要的类型

Struts对TypeConverter的扩展:

  OgnlValueStack中生成的上下文中使用了XworkConverter 做为类型转换类:

 protected void setRoot(XWorkConverter xworkConverter, CompoundRootAccessor accessor, CompoundRoot compoundRoot,
                           boolean allowStaticMethodAccess) {
        this.root = compoundRoot;
        this.securityMemberAccess = new SecurityMemberAccess(allowStaticMethodAccess);
        this.context = Ognl.createDefaultContext(this.root, accessor, new OgnlTypeConverterWrapper(xworkConverter), securityMemberAccess);
        context.put(VALUE_STACK, this);
        Ognl.setClassResolver(context, accessor);
        ((OgnlContext) context).setTraceEvaluations(false);
        ((OgnlContext) context).setKeepLastEvaluation(false);
    }

  即XworkConverter  是类型转换的入口,该类的UML类图如下:



 

 加载自定义TypeConverter:

  1.应用级别类型转换器

加载类路径下:

xwork-default-conversion.properties

xwork-conversion.properties

这两个文件默认是没有的,用户可以添加以扩展TypeConverter

  格式:转换目标类全名=TypeConverter类全名

 2.类级别的类型转换器(定义了该类中属性名与TypeConverter的对应关系):

    a properties方式

          加载“类全名-conversion.properties”,而生成的类属性与TypeConverter的对应关系

          格式:属性名=TypeConverter类全名

      b.标注在类上的Conversion Annotation

          

  

@Conversion(conversions={
		@TypeConversion(key = "属性名1", converter = "org.demo.converter.DateConverter"),
		@TypeConversion(key = "属性名2", converter = "org.demo.converter.MConverter"),
		}
)
public class Test{
   private 属性类型 属性名1;
   private 属性类型 属性名2;
}

      c.标注在方法上的TypeConversion Annotation

    

@TypeConversion(key="employeeMap",converter = "com.test.customMapConverter")
	public void setEmployeeMap(Map<String, Employee> employeeMap) {
		this.employeeMap = employeeMap;
	}

   指明对象转换为employeeMap,需要使用com.test.customMapConverter

 

 

 转换过程:

   1.先查询类级别的自定义的类型转换器,如果有,就使用

   2.查询应用级别的自定义的类型转换器,如果有,就使用

        3.使用XWorkBasicConverter  进行类型转换:

                 提供了toType为boolean,character,Class类型的转换,其它类型转换:交给其它TypeConverter处理:Container.getInstance(其它TypeCoverter):ArraryConverter、CollectionConverter、DataConverter、NumberConverter、StringConverter

 

 

框架设计:1.为用户扩展预留接口,首先使用自定义实现,无自定义实现则使用框架内置的默认实现

                  2.即要全局的总控也要允许个例的存在。

 

 

  • 大小: 1004.8 KB
分享到:
评论

相关推荐

    Struts2学习笔记

    - **用途**:在Struts2中,OGNL被广泛用于配置文件、标签库、拦截器等地方。 - **语法**:OGNL使用简单的语法来表示对对象属性的访问和操作。 #### 04 Struts2-Tags - **标签概述**:Struts2提供了丰富的标签库,...

    xwork-core-source-2.3.1.2源码

    1. **ActionContext**:在Struts2中,ActionContext是应用程序上下文的核心,它封装了请求、响应、session、application等对象,并管理线程局部变量,确保在多线程环境中的正确性。 2. **ActionInvocation**:...

    ssh 框架技术

    - **定义**:Data Access Object模式,用于封装对数据库的操作。 ##### 3. ORM是什么? - **ORM**:Object Relational Mapping,对象关系映射,将对象模型与关系型数据库之间的映射关系。 - **优点**:简化了...

    xwork-core-2.1.6.jar

    总之,深入理解xwork-core-2.1.6源码,能帮助开发者提升对Struts2框架的理解,从而编写出更高效、更稳定的应用。通过研究源码,开发者可以更好地应对框架中的问题,提高开发效率,同时也能为框架的进一步优化和扩展...

    java详解教程-structs 2

    在Struts 2中,ValueStack被设置为OGNL(Object-Graph Navigation Language)的根对象,这允许开发者使用基于OGNL表达式的标签直接访问ValueStack中的数据,例如访问Action的属性时,可以直接使用`...

    Xwork的源码

    Xwork是Struts2框架的核心组成部分,主要负责处理Action的业务逻辑,它是表现层框架Struts2的内核。在深入理解Struts2的工作原理时,解析Xwork的源码至关重要。Xwork为Struts2提供了强大的命令模式支持,包括动作...

    xwork-2.1.5API

    xWork是Struts2框架的核心组件之一,它为Struts2提供了动作调度、类型转换、拦截器等核心功能。Xwork-2.1.5是xWork的一个版本,这个版本的API文档详细地阐述了其内部的接口、类和方法,帮助开发者理解和使用xWork...

    xwork2.0.3 源码

    在XWork源码中,我们可以看到OGNL的解析和表达式求值过程,这对于理解Struts2中的数据绑定至关重要。 5. **TypeConverter**:XWork提供了一套强大的类型转换机制,使得不同类型的参数能够被自动转换成动作方法所需...

    xwork源码(全)

    Struts2是基于XWork构建的一个强大的MVC框架,而J2EE(Java 2 Platform, Enterprise Edition)是企业级应用开发的平台,Java则是XWork和Struts2的基础编程语言。 **XWork核心功能** 1. **Action管理**:XWork提供...

Global site tag (gtag.js) - Google Analytics