16.Struts2_OGNL读取Map栈(Context Map)里对象的属性及其他字段和方法
来源:互联网 发布:淘宝怎么批量添加水印 编辑:程序博客网 时间:2024/06/05 06:05
一.读取Context Map里的对象的属性
1.若想访问ContextMap里的某个对象的属性,可以使用以下几种方式形式之一:
#object.propertyName#object.['propertyName']
#object.["propertyName"]
示例:
-返回session中的code属性:#session.code
-返回request中的customer属性的name属性值:#request.customer.name
-返回域对象(按request,session,application的顺序)的lastAccessDate属性:#attr.lastAccessDate
2.实例:
Product.java:实现SessionAware,RequestAware接口,并往request、session中赋值。
package actionbao;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; } @Override public String toString() { return "Product [productName=" + productName + ", productDesc=" + productDesc + ", productPrice=" + productPrice + "]"; } public String save() { System.out.println("save " + this); //1.获取值栈 ValueStack valueStack = ActionContext.getContext().getValueStack(); //2.创建Test对象,并为其属性赋值 Test czy= new Test(); czy.setProductName("AAAAAA"); czy.setProductDesc("BBBBBB");//3将新对象压入值栈中 valueStack.push(czy); sessionMap1.put("you", this); resquest2.put("we",czy); return "details"; } private Map<String,Object> sessionMap1;@Overridepublic void setSession(Map<String, Object> arg0) {this.sessionMap1=arg0;}private Map<String,Object> resquest2;@Overridepublic void setRequest(Map<String, Object> arg0) {this.resquest2=arg0;} }Test.java
package actionbao;public class Test { 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;}}details.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><s:debug></s:debug> ProductId:${productId}<br/> ProductName:${productName}<br/> ProductDesc:${productDesc}<br/> ProductPrice:${productPrice}<br/> ProductId:<s:property value="[0].productName"/><br/> ProductId:<s:property value="[1].productName"/><br/> ProductId:<s:property value="productDesc"/><br/> ProductId:<s:property value="productPrice"/><br/> sessionTest:${sessionScope.you.productName} <s:property value="#session.you.productName"/><br/> requestTest:${requestScope.we.productName} <s:property value="#request.we.productName"/> <br/> </body></html>结果:
二.OGNL调用字段和方法
(1)调用任何一个 Java 类里的静态字段或方法.(2)调用被压入到 ValueStack 栈的对象上的公共字段和方法.
(1)调用任何一个 Java 类里的静态字段或方法.
前提:在struts.xml中配置启用允许调用java类里的静态方法。
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
details.jsp
<!--使用OGNL调用public类的public类型的静态字段和静态方法--><s:property value="@java.lang.Math@cos(0)"/><br> <s:property value="@java.lang.Math@PI"/><br>
刷新后效果:
(2)调用被压入到 ValueStack 栈的对象上的公共字段和方法.
<!--调用对象栈的方法为一个属性赋值--><s:property value="setProduceName('yiguang')"/><s:property value="ProductName"> </br>
三.OGNL读取访问数组类型的属性
1. 有些属性将返回一个对象数组而不是单个对象, 可以像读取任何其他对象属性那样读取它们. 这种数组型属性的各个元素以逗号分隔, 并且不带方括号
2. 可以使用下标访问数组中指定的元素: colors[0]
3. 可以通过调用其 length 字段查出给定数组中有多少个元素: colors.length
实例:
details.jsp:
<!--在jsp中写Java代码,需要放在<% %>中才能运行--><% String [] str = new String[]{"aa","bb","cc","dd","ee"}; request.setAttribute("str", str);%> length:<s:property value="#attr.str.length"/><br> name2:<s:property value="#attr.str[2]"/>结果:
四.OGNL读取访问 List 类型的属性
实例:
details.jsp:
<!--OGNL读取访问 List 类型的属性 --><!--List是一个接口,而接口是不能被实例化的,只有通过实现了该接口的类进行实列化;在jsp中创建list需要导入java.util.ArrayList和java.util.List,> <% List<String> arrayList1= new ArrayList<String>(); arrayList1.add("aa"); arrayList1.add("bb"); arrayList1.add("cc"); arrayList1.add("dd"); request.setAttribute("list",arrayList1);%><<%List<String> arrayList2 = new ArrayList<String>(){{add("str01"); add("str02");}};List<String> arrayList3=new ArrayList<String>(){{add("11");add("22");add("33");add("44");}};request.setAttribute("li",arrayList2);request.setAttribute("yi",arrayList3);%>arraylist1:<s:property value="#attr.list.size"/><br> arraylist1:<s:property value="#attr.list[1]"/> <br/>arraylist2:<s:property value="#attr.li.isEmpty"/> <br/>arraylist3:<s:property value="#attr.yi[1]"/> <br/>结果显示:
五.OGNL读取访问 Map 类型的属性
实例:
details.jsp
<!--需要引入包<%@ page import="java.util.HashMap"%>和<%@ page import="java.util.Map"%>--><% Map<String,String> map=new HashMap<String,String>();map.put("aa","AA");map.put("bb","BB");request.setAttribute("gou",map);%><s:property value="#attr.gou['aa']"/><br/><s:property value="#attr.gou.size"/><br/>结果显示:
六.使用EL访问值栈中对象的属性
总代码:
Product.java:
package actionbao;import java.util.Map;import java.util.ArrayList;import java.util.HashMap;import java.util.List;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; } @Override public String toString() { return "Product [productName=" + productName + ", productDesc=" + productDesc + ", productPrice=" + productPrice + "]"; } public String save() { System.out.println("save " + this); //1.获取值栈 ValueStack valueStack = ActionContext.getContext().getValueStack(); //2.创建Test对象,并为其属性赋值 Test czy= new Test(); czy.setProductName("AAAAAA"); czy.setProductDesc("BBBBBB");//3将新对象压入值栈中 valueStack.push(czy); sessionMap1.put("you", this); request2.put("we",czy); List<String> arrayList1= new ArrayList<String>(); arrayList1.add("aa"); arrayList1.add("bb"); arrayList1.add("cc"); arrayList1.add("dd"); request2.put("list",arrayList1); Map<String,String> map=new HashMap<String,String>(); map.put("aa","AA"); map.put("bb","BB"); request2.put("gou",map); return "details"; } private Map<String,Object> sessionMap1;@Overridepublic void setSession(Map<String, Object> arg0) {this.sessionMap1=arg0;} private Map<String,Object> request2;@Overridepublic void setRequest(Map<String, Object> arg0) {this.request2=arg0;}}
details.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags"%><%@ page import="java.util.List"%><%@ page import="java.util.ArrayList"%><%@ page import="java.util.HashMap"%><%@ page import="java.util.Map"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><s:debug></s:debug> ProductId:${productId}<br/> ProductName:${productName}<br/> ProductDesc:${productDesc}<br/> ProductPrice:${productPrice}<br/> <!--1.对象栈中某一个对象的属性值.--> ProductId:<s:property value="[0].productName"/><br/> ProductId:<s:property value="[1].productName"/><br/> ProductId:<s:property value="productDesc"/><br/> ProductId:<s:property value="productPrice"/><br/> <!--2.访问ContextMap里的某个对象的属性.--> sessionTest:${sessionScope.you.productName} <s:property value="#session.you.productName"/><br/> requestTest:${requestScope.we.productName} <s:property value="#request.we.productName"/> <br/> <!--3.调用任何一个 Java 类里的静态字段或方法.--> <s:property value="@java.lang.Math@cos(0)"/><br> <s:property value="@java.lang.Math@PI"/><br> <!--4.调用被压入到 ValueStack 栈的对象上的公共字段和方法--> <s:property value="setProductName('yiguang')"/> name1:<s:property value="ProductName"/> </br> <!--5.OGNL读取访问 数组 类型的属性--> <% String [] str1 = new String[]{"aa","bb","cc","dd","ee"}; request.setAttribute("str", str1); %> length:<s:property value="#attr.str.length"/><br> name2:<s:property value="#attr.str[2]"/> <br/> <!--6.OGNL读取访问list类型的属性--> <!-- <% List<String> arrayList1= new ArrayList<String>(); arrayList1.add("aa"); arrayList1.add("bb"); arrayList1.add("cc"); arrayList1.add("dd"); request.setAttribute("list",arrayList1);%>--><%List<String> arrayList2 = new ArrayList<String>(){{add("str01"); add("str02");}};List<String> arrayList3=new ArrayList<String>(){{add("11");add("22");add("33");add("44");}};request.setAttribute("li",arrayList2);request.setAttribute("yi",arrayList3);%>arraylist1:<s:property value="#attr.list.size"/><br> arraylist1:<s:property value="#attr.list[1]"/> <br/>arraylist2:<s:property value="#attr.li.isEmpty"/> <br/>arraylist3:<s:property value="#attr.yi[1]"/> <br/><!--7.OGNL读取访问 Map 类型的属性--><!-- <% Map<String,String> map=new HashMap<String,String>();map.put("aa","AA");map.put("bb","BB");request.setAttribute("gou",map);%>--><s:property value="#attr.gou['aa']"/><br/><s:property value="#attr.gou.size"/><br/> </body></html>
阅读全文
0 0
- 16.Struts2_OGNL读取Map栈(Context Map)里对象的属性及其他字段和方法
- (16)Struts2_OGNL读取Map栈及其他字段和方法属性
- 15.Struts2_OGNL读取对象栈(ObjectStack)属性
- Jquery的traditional属性和map()方法
- Java Map 初始化及其他
- MAP/REDUCE:Google和Nutch实现异同及其他
- MAP/REDUCE:Google和Nutch实现异同及其他
- 遍历Map对象的方法
- Struts2_OGNL和值栈
- (15)Struts2_OGNL读取Object栈
- 对象、数组、字符串以及map和set的遍历方法
- JSTL中读取Map的数据方法
- 将JavaBean对象的全部属性(包括父类属性)存放于map中的方法
- java里的HashMap和map
- 对象属性拷贝方法,支持源对象为MAP的拷贝
- Java map(1)---遍历Map对象的4种方法
- JavaScript的对象及其属性、方法和事件处理
- 利用 Map 集合的 containsKey 方法,实现对象数组的去重以及重复对象的字段值累加
- Python SMTP 发送纯文本邮件
- thinkphp(2) foreach($arr as &$value)用法 记录一下
- 深入理解JVM
- Java文件--复制
- first day
- 16.Struts2_OGNL读取Map栈(Context Map)里对象的属性及其他字段和方法
- csv文件中关于null byte的处理
- cdecl、stdcall、fastcall函数调用约定区别
- python中“+=”操作与“+”操作
- 使用Mac iterm2连接Linux服务器
- 剑指offer 51 数组中重复的数字
- 事件遮罩
- linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题
- java中自定义封装json以及和对象的转换