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.即要全局的总控也要允许个例的存在。
相关推荐
- **用途**:在Struts2中,OGNL被广泛用于配置文件、标签库、拦截器等地方。 - **语法**:OGNL使用简单的语法来表示对对象属性的访问和操作。 #### 04 Struts2-Tags - **标签概述**:Struts2提供了丰富的标签库,...
1. **ActionContext**:在Struts2中,ActionContext是应用程序上下文的核心,它封装了请求、响应、session、application等对象,并管理线程局部变量,确保在多线程环境中的正确性。 2. **ActionInvocation**:...
- **定义**:Data Access Object模式,用于封装对数据库的操作。 ##### 3. ORM是什么? - **ORM**:Object Relational Mapping,对象关系映射,将对象模型与关系型数据库之间的映射关系。 - **优点**:简化了...
总之,深入理解xwork-core-2.1.6源码,能帮助开发者提升对Struts2框架的理解,从而编写出更高效、更稳定的应用。通过研究源码,开发者可以更好地应对框架中的问题,提高开发效率,同时也能为框架的进一步优化和扩展...
在Struts 2中,ValueStack被设置为OGNL(Object-Graph Navigation Language)的根对象,这允许开发者使用基于OGNL表达式的标签直接访问ValueStack中的数据,例如访问Action的属性时,可以直接使用`...
Xwork是Struts2框架的核心组成部分,主要负责处理Action的业务逻辑,它是表现层框架Struts2的内核。在深入理解Struts2的工作原理时,解析Xwork的源码至关重要。Xwork为Struts2提供了强大的命令模式支持,包括动作...
xWork是Struts2框架的核心组件之一,它为Struts2提供了动作调度、类型转换、拦截器等核心功能。Xwork-2.1.5是xWork的一个版本,这个版本的API文档详细地阐述了其内部的接口、类和方法,帮助开发者理解和使用xWork...
在XWork源码中,我们可以看到OGNL的解析和表达式求值过程,这对于理解Struts2中的数据绑定至关重要。 5. **TypeConverter**:XWork提供了一套强大的类型转换机制,使得不同类型的参数能够被自动转换成动作方法所需...
Struts2是基于XWork构建的一个强大的MVC框架,而J2EE(Java 2 Platform, Enterprise Edition)是企业级应用开发的平台,Java则是XWork和Struts2的基础编程语言。 **XWork核心功能** 1. **Action管理**:XWork提供...