• Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值:

I、值栈中的属性值:
  1、对象栈:读取对象栈中的某一个对象的属性值;
  2、Map栈 :request,session,application的一个属性值或一个请求参数的值。

II、读取对象栈(ObjectStack)中的对象属性:
  1、若想读取Object Stack里的某个对象的属性,可以通过以下集中形式之一:
    object.propertyname
    object['propertyname']
    object["propertyname"]
  2、ObjectStack中的对象可以从0开始的的下表来引用,ObjectStack里的栈顶对象可以用[0]来引用,它下面的那个对象可以用[1]引用。
    [0].message
  3、[n]的含义是从第n个开始搜索,而不是值搜索第n个对象
  4、若从栈顶对象开始搜索,则可以省略下标部分:message
  5、结合s:property标签<s:property value="[0].message" />或者 <s:property value="message"/>(通常情况下都采用这种方式来写)

<%@ taglib prefix="s" uri="/struts-tags"%>

备注:如果需要使用s:property标签,必须在jsp页面头部引入:

III、默认情况下,action会被struts2自动放在值栈的顶部。

  • 值栈属性读取示例:

基于《Struts(九):值栈(OGNL)》这一篇文章的例子基础上,修改details.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><s:debug/><s:property value="productName"/><br/>
${productDesc}<br/>
${productPrice}<br/></body>
</html>

调试启动tomcat,输入地址:http://localhost:8080/Struts_01/,页面:

点击“提交”按钮,跳转到details.jsp

点开[Debug]

这里边的com.dx.sturts2.valuestack.Product存储的对象就是Action,被存储到了ValueStack的栈顶,所以details.jsp页面可以使用${productDesc},相当于<s:property value="[0].productDesc"/> 也相当于<s:property value="productDesc"/>

添加一个Product2.java:

 1 package com.dx.struts2.valuestack;
 2
 3
 4 public class Product2 {
 5     private String productName;
 6     private String productDesc;
 7
 8     public String getProductName() {
 9         return productName;
10     }
11
12     public void setProductName(String productName) {
13         this.productName = productName;
14     }
15
16     public String getProductDesc() {
17         return productDesc;
18     }
19
20     public void setProductDesc(String productDesc) {
21         this.productDesc = productDesc;
22     }
23
24 }

View Code

修改Product.java Action save方法:

public String save(){     System.out.println("save");// 1、获取值栈对象ValueStack valueStack= ActionContext.getContext().getValueStack();// 2、生成一个Product2对象Product2 product2=new Product2();product2.setProductDesc("product2 desc");product2.setProductName("product2 name");// 3、将Product2对象存放到值栈中
        valueStack.push(product2);return "success";}

继续查看details.jsp:

调试Product的save方法:

从截图我们可以知道:Action类对象在进入save方法之前就已经被放入到栈顶。

details.jsp:

点开[Debug]

转载于:https://www.cnblogs.com/yy3b2007com/p/6538147.html

Struts(十):OGNL表达式(一)相关推荐

  1. JSTL/EL表达式/Struts2标签/OGNL表达式

    文章目录 JSTL + EL表达式 Struts 标签 + OGNL表达式 JSTL + EL表达式 JSTL 只能用在 JSP 文件中,不可以在 XML 和 HTML 文件中使用,不可以用在 JS ...

  2. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...

  3. Struts标签和OGNL表达式

    Struts标签和OGNL表达式 1.OGNL通过索引访问ValueStack中的对象. [0].name [1].name 上面使用的索引的方式并不是直接取得指定元素,而是从指定索引开始向下搜索. ...

  4. Struts 2的OGNL表达式

    来源:http://www.24xuexi.com/w/2011-04-26/88911.html Struts 2的OGNL表达式 标准的OGNL会设定一个根对象(root对象).假设使用标准OGN ...

  5. struts OGNL表达式

    OGNLContext对象有两部分构成 一部分是ROOT:可以放置任何对象作为ROOT 另外一部分Context:必须是Map形式(键值对) OGNL表达式操作 package cn.future.a ...

  6. 关于OGNL表达式中的%,$,#

    OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,要认真区分.   1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例 ...

  7. 深入理解Struts2中的OGNL表达式

    Struts 2中的表达式语言 Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JST ...

  8. Struts2漏洞分析之Ognl表达式特性引发的新思路

    摘要 在Ognl表达式中,会将被括号"()"包含的变量内容当做Ognl表达式执行.Ognl表达式的这一特性,引发出一种新的攻击思路.通过将恶意代码存储到变量中,然后在调用Ognl表 ...

  9. struts2教程(9)--OGNL表达式使用

    OGNL表示式使用和值栈 一.介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的 ...

最新文章

  1. 【Flutter】Flutter 应用主题 ( ThemeData | 动态修改主题 )
  2. 360美女运营孙哲:生活就应像花朵一样绽放
  3. 在word中,整篇文章想要在每一章另起一页
  4. 沣东新城镐京遗址规划_沣东新城房价为啥这么高?
  5. 95-30-020-java.util-Map
  6. Access SqLDbHelper
  7. oracle 知识点
  8. Stetho简化Android调试(二)
  9. unity打开htc vive 的前置摄像头 和 实现增强现实效果
  10. 【背包问题】基于粒子群算法求解0-1背包问题matlab代码
  11. 【最新黑苹果】Big Sur/Win双系统-小米笔记本pro/gtx 安装教程!
  12. 遗传算法的基本原理与方法(转)
  13. 动作频频,BAT欲瓜分10万亿互联网医疗市场蛋糕?
  14. re- 正则表达操作
  15. 简单学JAVA-Java学习方法-JavaSE阶段
  16. react——@修饰器——高阶组件的使用——通过装饰器来调用高阶组件——简单修改样式
  17. AI得贤招聘官上线ChatGPT,免费为企业提供AI智能助手Molly
  18. 常用电子面单接口API demo下载(菜鸟快递鸟)
  19. Java解析PDF文件(PDFBOX、itext解析PDF)导出PDF中的子图片,去除PDF中的水印
  20. 读Zepto源码之Ajax模块 1

热门文章

  1. Java Nashorn--Part 3
  2. Cracking The Coding Interview5.2
  3. Extjs4 actioncolumn只能显示图标,不能显示文字的暂时解决方法
  4. 牛津剑桥古怪面试题:美女与经济学
  5. go语言实现简易ftp客户端
  6. VS2015--win32project配置的一些想法之在 Visual Studio 2015 中进行调试的同一时候分析性能...
  7. 05-数据类型、常量、变量
  8. struts2 18拦截器详解(五)
  9. VSS (Visual Source Safe 2005) 用法详解
  10. 在Unix/Linux上令(java)JVM支持中文输出