• 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> 标签显示异常消息。

  • 相关阅读:
    HTTP——学习笔记(3)
    HTTP——状态码
    HTTP——学习笔记(2)
    HTTP——学习笔记(1)
    Sqlserver 存储过程
    Sqlserver 函数(例子)
    Sqlserver 函数
    sqlserver字段类型
    redis入门笔记(2)
    redis入门笔记(1)
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6566083.html
Copyright © 2020-2023  润新知