• 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:

 package com.dx.struts2.valuestack;

 public class Product2 {
private String productName;
private String productDesc; public String getProductName() {
return productName;
} public void setProductName(String productName) {
this.productName = productName;
} public String getProductDesc() {
return productDesc;
} public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
} }

修改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]

Struts(十):OGNL表达式(一)的更多相关文章

  1. Struts 2 OGNL

    1.什么是OGNL? 2.Struts 2 OGNL 表达式      ======================  华丽丽的分割线  ======================  1.什么是OG ...

  2. (七)Action之ActionContext(OGNL表达式的使用)

    一.ActionContext的重要性 struts中的数据都存放在ActionContext里,所以这部分是Action中的核心. ActionContext又称广义值栈,既然有广义值栈就有侠义值栈 ...

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

    我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...

  4. 六 Struts 拦截器、OGNL表达式

    一.OGNL表达式1.概念:是表达式语言,专门用来访问对象取值用的.2.对比EL表达式使用场景: A.EL主要用在web的jsp页面取值 B.OGNL适用以下环境 1.java程序中 2.在页面使用( ...

  5. struts框架中OGNL表达式的使用之jsp页面获取action中的属性值

    在jsp页面中获取action中的值: 1.写一个action类OgnlAction类: 需要注意的地方: 如果在aciton中直接使用ognl表达式,将值存储的值栈中,是不能通过跳转将值传到jsp页 ...

  6. struts框架之总结OGNL表达式的特殊的符号

    1. # 符号的用法 * 获得contextMap中的数据 > <s:property value="#request.name"/> > <s:pr ...

  7. Struts ognl表达式语言几个符号

    #  获取非根元素值  . 动态都建map集合 $  配置文件取值 %  提供一个ognl表达式运行环境 <%@ page language="java" import=&q ...

  8. Java实战之01Struts2-04拦截器、上传下载、OGNL表达式

    十二.Struts2中的拦截器 1.拦截器的重要性 Struts2中的很多功能都是由拦截器完成的.比如:servletConfig,staticParam,params,modelDriven等等. ...

  9. Ognl表达式基本原理和使用方法

    Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...

随机推荐

  1. Go语言学习1

    1.go标示符:非空字母或者数字串,第一个必须是字母,不能为关键字,可以是下划线. 2.go关键字: break,default,func,interface,select, case,defer,g ...

  2. 笔记:Spring Cloud Ribbon 客户端配置详解

    自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...

  3. 笔记:XML-解析文档-XPath 定位信息

    如果需要定位某个XML文档中的一段特定信息,那么通过遍历DOM 树的众多节点来进行行查找显得有些麻烦,XPath语言使得访问树节点变得很容易,例如,下面的XML文档结构: <?xml versi ...

  4. 排序算法Java实现(归并排序)

    算法描述:对于给定的一组记录,首先将每两个相邻的长度为1的子序列进行归并,得到 n/2(向上取整)个长度为2或1的有序子序列,再将其两两归并,反复执行此过程,直到得到一个有序序列. package s ...

  5. R语言-文本挖掘

    ---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...

  6. echarts图表变形解决方案

    在同一页面的多个echarts图在查询或切换图片时可能会变形,如图 解决方案是添加以下几行代码 /*在查询或切换统计图时图片有可能会变形,于是每次调getEchartsData()都给每个chart的 ...

  7. Kettle 初始配置数据量类型资源库

    PS:有段时间不使用Kettle了,但总遇到小伙伴问起,写一篇记录下. 文档使用版本:KETTLE 7.0 Kettle资源库可分为文件与数据库,文件型只需要配置好存放路径就行,这边介绍的是配置数据库 ...

  8. JAVA读取Excel中内容(HSSF和Workbook两种方法)

    内容添加,以前是用的HSSF,前几天帮同学写一个统计表用了Workbook,现在码一下. ---新内容(Workbook)--- 同学要统计一个xls表格,让表1里面的某一列内容对表2里面的每列进行匹 ...

  9. JavaScript(第二十七天)【错误处理与调试】

    JavaScript在错误处理调试上一直是它的软肋,如果脚本出错,给出的提示经常也让人摸不着头脑.ECMAScript第3版为了解决这个问题引入了try...catch和throw语句以及一些错误类型 ...

  10. 2018.3.29 DIV位置调整代码

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...