Struts(十一):OGNL表达式(二)
- Map栈 :request,session,application的一个属性值或一个请求参数的值。
若想访问ContextMap里的某个对象的属性,可以使用以下几种之一:
#object.propertyName
#object['propertyName']
#object["propertyName"]
示例:
返回session中的code属性:#session.code;
返回request中的customer对的name属性值:#request.customer.name
返回域对象(按request,session,application的顺序)的lasterActionDate属性:#attr.lastAccesssDate
- 例子:基于《Struts(九):值栈(OGNL)》中的例子对Product对象进行修改:
Product.java实现RequestAware、SessionAware接口,并在save方法中把this存放到sessionMap,把product2存放到requestMap中:
package com.dx.struts2.valuestack; import java.io.UnsupportedEncodingException;
import java.util.Map; import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack; public class Product implements RequestAware,SessionAware{
private Integer productId;
private String productName;
private String productDesc;
private Double productPrice; public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
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;
}
public Double getProductPrice() {
return productPrice;
}
public void setProductPrice(Double productPrice) {
this.productPrice = productPrice;
} 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); sessionMap.put("product", this);
requestMap.put("product2", product2); return "success";
} private Map<String,Object> requestMap; @Override
public void setRequest(Map<String, Object> request) {
this.requestMap=request; } private Map<String,Object> sessionMap; @Override
public void setSession(Map<String, Object> session) {
this.sessionMap= session;
}
}
details.jsp获取方式有两种:
productName:<br/>
${sessionScope.product.productName}<br/>
or<br/>
<s:property value="#session.product.productName"/><br/>
<br/>
productName:<br/>
${requestScope.product.productName}<br/>
or<br/>
<s:property value="#request.product.productName"/><br/>
- 调用字段和方法
1、可以利用OGNL调用
任何一个java类里的静态字段和方法;
被压入到ValueStack栈的对象上的公共字段和方法。
2、默认情况下,Strut2不允许调用任何java类的方法,需要重新设置struts.ognl.allowStaticMethodAccess标记变量为true.
3、调用静态字段或者方法需要使用如下所以的语法:
@fullyQualifiedClassName@fieldName
例如:
<s:property value="@java.lang.Math@PI"/>
@fullyQualifiedClassName@methodName(argumentList)
例如:
<s:property value="@java.lang.Math@cos(0)"/>
注意:此时默认是不允许输出结果的在strut2-core.jar中default.proerpties中包含struts.ognl.allowStaticMethodAccess
修需在struts.xml中
<struts>
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
...
</struts>
4、调用一个实例字段或者方法的语句,其中object是Object Stack栈里的某个对象的引用:
object.fieldName:[0].datePattern
object.methodName(argumentList):[0].repeat(3,"hello");
<s:property value="[0].setProductName('set product name')"/>
<s:property value="[0].productName" />
5、还可以访问数组对象的属性。
<%String[] colors=new String[]{"red","blue"};
request.setAttribute("colors",colors);
%>
length:<s:property value="#attr.colors.length"/>
colors[1]:<s:property value="#attr.colors[1]"/>
6、访问List类型的属性
7、访问Map类型的属性
<%Map<String,String> letters=new HasMap<String,String>();
letters.put("aa","Aa");
request.setAttribute("letters",letters);
%>
<s:property value="#attr.letters.size"/>
AA:
<s:property value="#attr.letters["aa"]"/>
Struts(十一):OGNL表达式(二)的更多相关文章
- 3:4 OGNL 表达式二
总结: 一:ActionContext的结构: 1:set标签创建的对象也是作为非值栈对象. 2:(非值栈的存储都是以键值对的方式存的.) [问非值栈的 User对象] [用例] 关于request: ...
- 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)
Ognl经常使用标签: 1.s:debug 假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态 2.s:property 1.输出 ...
- Struts 2 OGNL
1.什么是OGNL? 2.Struts 2 OGNL 表达式 ====================== 华丽丽的分割线 ====================== 1.什么是OG ...
- 使用OGNL表达式
OGNL表达式(#号的用法) 用法1:访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() 1.如果访问其他Context中的对象,由于他们不是根对象, ...
- (七)Action之ActionContext(OGNL表达式的使用)
一.ActionContext的重要性 struts中的数据都存放在ActionContext里,所以这部分是Action中的核心. ActionContext又称广义值栈,既然有广义值栈就有侠义值栈 ...
- Struts2的标签库(二)——OGNL表达式
Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...
- 六 Struts 拦截器、OGNL表达式
一.OGNL表达式1.概念:是表达式语言,专门用来访问对象取值用的.2.对比EL表达式使用场景: A.EL主要用在web的jsp页面取值 B.OGNL适用以下环境 1.java程序中 2.在页面使用( ...
- 初窥struts2(二)OGNL表达式
Struts2总结 Struts2完整的处理流程: 1 客户端发送请求,交给struts2控制器(StrutsPrepareAndExecuteFilter). 2 Filter控制器进行请求过滤 ...
- Struts(十):OGNL表达式(一)
Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session, ...
随机推荐
- 使用Quartz 2D擦除图片
Quartz 2D 是一个强大的二位图像绘制引擎,在开发中如果遇到需要高度自定义的控件,我们就可能需要用Core Graphics进行绘制. 这几天一同事开发一个聊天中的一个子模块,A 画一幅图,然后 ...
- 重读 必须知道的.NET
1 .public ,对访问成员无限制,属于访问级别最高的权限. protected 访问包含类或者丛类派生类的类. internal 仅限于程序集, protected inernal 访问仅限于 ...
- 笔记:I/O流-文件操作
Java库中使用 Path 和 Files 类封装了在用户机器上处理文件系统所需要的所有功能,可以使用Paths来获取一个具体的Path对象,来表示具体的路径. 路径 Path表示的是一个目录名序列, ...
- java编程基础知识及常见例题
⒈标识符: 只能包含数字.字母.下划线.$,并且不能以数字开头.语义直观规范 驼峰法则: 如:方法名.变量名采用驼峰法则 帕斯卡命名法: 如: 类.接口.枚举采用帕斯卡命名法包名:网址倒写,com.网 ...
- JDK1.8源码(四)——java.util.Arrays 类
java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...
- 测试框架Mocha
NodeJS里最常用的测试框架估计就是mocha了.它支持多种node的assert libs, 同时支持异步和同步的测试,同时支持多种方式导出结果,也支持直接在browser上跑Javascript ...
- 使用Docker快速搭建Nginx+PHP-FPM环境
下载nginx官方镜像和php-fpm镜像 docker pull nginx docker pull bitnami/php-fpm 使用php-fpm镜像开启php-fpm应用容器 docker ...
- Dynamics 365 Online-使用Azure Logic App 与 Dynamics 365 集成
什么是Logic App? Azure Logic App 是微软发布的集成平台的产品,有助于生成,计划和自动完成工作流形式的流程,适合跨企业或组织集成,数据,系统和服务.与此同时,Logic App ...
- 深入解析C语言数组和指针
概述 指针是C语言的重点,同时也是让初学者认为最难理解的部分.有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言.暂且撇开这些观点不谈.这章是我在阅读<C和指针>这本书的读书笔记. ...
- JavaOOP-集合框架
1.Java集合框架包含的内容 Java集合框架为我们提供了一套性能优良,使用方便的接口和类,它们都位于在java.util包中. Collection 接口存储一组不唯一,无序的对象. List 接 ...