值栈:(ValueStack)数组
1)、helloWorld 时,${productName} 读取 productName 值,实际上该属性并不在 request 等域对象中,而是从值栈中获取的。session
2)、能够从 ActionContext 中获取值栈对象数据结构
3)、值栈分为两个逻辑部分:app
> Map 栈:其实是 OgnlContext 类型,是个Map,也是对 ActionContext 的一个引用,里边保存着各类 Map:requestMap、sessionMap、applicationMap、parametersMap、attrspa
> 对象栈:其实是 CompoundRoot 类型,是一个使用 ArrayList 定义的栈。里边保存各类和当前 Action 实例相关的对象。是一个数据结构意义的栈。code
在Jsp 页面上能够利用 OGNL 访问到值栈里的对象属性。对象
若但愿访问值栈中 ContextMap 中的数据,须要给 OGNL 表达式加上一个前缀字符 #。若是没有前缀字符 # ,搜索将在 ObjectStack 里进行。io
Struts 的 property 标签用来输出值栈中的一个属性值。ast
读取 ObjectStack 里的对象的属性:配置
--若想访问 ObjectStack 里的某个对象的属性,能够使用如下几种形式之一:
object.propertyName、object['propertyName']、object["propertyName"]
--ObjectStack 里的对象能够经过一个从零开始的下标来引用。栈顶对象用[0]来引用,它下面那个对象能够用[1]来引用。[0].message
--[n] 的含义是从第 n 个开始搜索,而不是只搜索第 n 个对象。
--若从栈顶对象开始搜索,则能够省略下标部分。 message
--结合 s:property 标签:<s:property value="[0].message"/> <s:property value="message"/>
默认状况下,Action 对象会被 Struts2 自动的放到值栈的栈顶。
读取 ContextMap 里的对象的属性:
--若想访问 ContextMap 里的某个对象的属性,能够使用如下几种形式之一:
#object.propertyName、#object['propertyName']、#object["propertyName"]
--示例:
返回 session 中的 code 属性:#session.code
返回 request 中的 customer 属性的 name 属性值:#request.customer.name
返回域对象(按 request、session、application的顺序)的 lastAccessDate 属性:#attr.lastAccessDate
能够利用 OGNL 调用:任何一个 Java 类里的静态字段或方法。被压入到 ValueStack 的对象上的公共字段和方法。
--调用静态字段或方法的语法:
@fullyQualifiedClassName@fieldName
@fullyQualifiedClassName@methodName(argumentList)
--调用一个实例字段或方法的语法,其中 object 是 ObjectStack 栈里的某个对象的引用
@.object.fieldName: [0]date
@.object.methodName(argumentList):[0].repeat(3, "hello");
访问数组类型的属性:
能够使用下标访问数组中指定的元素:colors[0]。
能够经过调用其 length 字段查出给定数组中有多少个元素:colors.length
访问 List 类型的属性:
能够使用下标访问 List 中指定的元素:colors[0]
能够经过调用其 size 方法或专用关键字 size 的方法查出给定的 List 的长度:colors.size 或 colors.size()
能够经过使用 isEmpty() 方法或专用关键字 isEmpty 来得知给定的 List 是否是空。colors.isEmpty 或 colors.isEmpty()
还能够使用 OGNL 表达式来建立 List,建立一个 List 与声明一个 Java 数组是相同的。
访问 Map 类型的属性:
检索某个 Map 的值:map[key]
得出某个 Map 的键值对的个数:使用 size 或 size()
检查 Map 是否为空:使用 isEmpty 或 isEmpty()
异常处理:
exception-mapping 元素:配置当前 action 的声明式异常处理。
它有两个属性:exception:指定须要补货的异常类型。异常的全类名。
result:指定一个响应结果,该结果将在补货到指定异常时被执行。
能够经过 global-exception-mapptings 元素为应用程序提供一个全局性的异常捕获映射。但在其元素下 声明的任何 exception-mapping 元素只能引用在 global-results 元素下声明的某个 result 元素。
声明式异常处理机制由 ExceptionMappingInterceptor 拦截器负责处理,该拦截器会向 ValueStack 中天剑两个对象:exception、excepionStack
能够在视图上经过 <s:property> 标签显示异常消息。