勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

访问值栈属性值 使用OGNL表达式和property标签

值栈属性的访问

JSP 页面上可以可以利用 OGNL(Object-Graph Navigation Language: 对象-图导航语言) 和property标签访问到值栈(ValueStack) 里的对象属性。

         注

  • 默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶。
  • 【源码公布在我的GitHub上:Struts2-learn-5-OGNL

读取ObjectStack中的对象的属性

三种访问形式和基本规则

  1. object.propertyName
  2. object[‘propertyName’]
  3. object[“propertyName”]

       注:

  • ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用, 它下面的那个对象可以用 [1] 引用. 若希望返回栈顶对象的 message 属性值: [0].message 或 [0][“message”] 或 [0][‘message’]
  • 若在指定的对象里没有找到指定的属性, 则到指定对象的下一个对象里继续搜索. 即 [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象
  • 若从栈顶对象开始搜索, 则可以省略下标部分
  • 结合 s:property 标签: <s:property value=”[0].message” /> <s:property value=”message” />

Example

在Peoduct中的save方法中获取ValueSatck并创建对象赋值然后压入值栈,可以看到Action的对象被新的对象从栈顶挤到栈顶下:

显示结果如下:

读取ContextMap中的对象的属性

三种访问形式和基本规则

  1. #object.propertyName
  2. #object[‘propertyName’]
  3. #object[“propertyName”]
  • 示例:
  1. 返回 session 中的 code 属性: #session.code
  2. 返回 request 中的 customer 属性的 name 属性值: #request.customer.name
  3. 返回域对象(按 request, session, application 的顺序)的 lastAccessDate 属性: #attr.lastAccessDate

Example

把两个对象分别放入sessionMap和requestMap中然后获取值:

取值:

显示结果:

OGNL调用字段和方法

可以利用 OGNL 调用:

  • 任何一个 Java 类里的静态字段或方法.
  • 被压入到 ValueStack 栈的对象上的公共字段和方法.

       注:

  1. 默认情况下, Struts2 不允许调用任意 Java 类静态方法, 需要重新设置 struts.ognl.allowStaticMethodAccess 标记变量的值为 true.
  2. 调用静态字段或方法需要使用如下所示的语法:
  • @fullyQualifiedClassName@fieldName: @java.util.Calendar@DECEMBER
  • @fullyQualifiedClassName@methodName(argumentList): @app4.Util@now()

3. 调用一个实例字段或方法的语法, 其中 object 是 Object Stack 栈里的某个对象的引用:

  • .object.fieldName: [0].datePattern
  • .object.methodName(argumentList): [0].repeat(3, “Hello”);

Example

调用数组类型、List类型和Map类型的属性

使用规则:

  • 有些属性将返回一个对象数组或list或map而不是单个对象, 可以像读取任何其他对象属性那样读取它们.
  • 可以使用下标访问数组或list中指定的元素: colors[0]
  • 使用Map[“key”]的方式获取map中的值
  • 可以通过调用其 length(或size)字段查出给定数组或list(或map)中有多少个元素

Example

举例数组(list类似)和map:

运行结果:

EL表达式和OGNL

<s:property value=“fieldName”> 也可以通过 JSP EL 来达到目的: ${fieldName}

原理

Struts2 将包装 HttpServletRequest 对象后的 org.apache.struts2.dispatcher.StrutsRequestWrapper 对象传到页面上, 而这个类重写了 getAttribute() 方法。

赞(0)
未经允许不得转载:喋喋不休 » 访问值栈属性值

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选