Struts2:笔记3
值栈:(ValueStack)
1)、helloWorld 时,${productName} 读取 productName 值,实际上该属性并不在 request 等域对象中,而是从值栈中获取的。
2)、可以从 ActionContext 中获取值栈对象
3)、值栈分为两个逻辑部分:
> Map 栈:实际上是 OgnlContext 类型,是个Map,也是对 ActionContext 的一个引用,里边保存着各种 Map:requestMap、sessionMap、applicationMap、parametersMap、attr
> 对象栈:实际上是 CompoundRoot 类型,是一个使用 ArrayList 定义的栈。里边保存各种和当前 Action 实例相关的对象。是一个数据结构意义的栈。
在Jsp 页面上可以利用 OGNL 访问到值栈里的对象属性。
若希望访问值栈中 ContextMap 中的数据,需要给 OGNL 表达式加上一个前缀字符 #。如果没有前缀字符 # ,搜索将在 ObjectStack 里进行。
Struts 的 property 标签用来输出值栈中的一个属性值。
读取 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> 标签显示异常消息。