16.Struts2_OGNL讀取Map棧(Context Map)裡物件的屬性及其他欄位和方法
一.讀取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中賦值。
Test.javapackage 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; @Override public void setSession(Map<String, Object> arg0) { this.sessionMap1=arg0; } private Map<String,Object> resquest2; @Override public void setRequest(Map<String, Object> arg0) { this.resquest2=arg0; } }
details.jsppackage 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; } }
<%@ 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="@[email protected](0)"/><br>
<s:property value="@[email protected]"/><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;
@Override
public void setSession(Map<String, Object> arg0) {
this.sessionMap1=arg0;
}
private Map<String,Object> request2;
@Override
public 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="@[email protected](0)"/><br>
<s:property value="@[email protected]"/><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>
相關推薦
16.Struts2_OGNL讀取Map棧(Context Map)裡物件的屬性及其他欄位和方法
一.讀取Context Map裡的物件的屬性 1.若想訪問ContextMap裡的某個物件的屬性,可以使用以下幾種方式形式之一: #object.propertyName#object.['propertyName']#object.["propertyName"] 示例:
JS47 Map()的營救:使物件屬性有順序
在對一個物件進行遍歷時,每個瀏覽器都有自己的規則,遍歷的順序是不確定的: var myObject = { z: 1, '@': 2, b: 3, 1: 4, 5: 5 }; for (item in myObject) { console.log(item
任意檔案讀取路徑、欄位和payload
敏感欄位 &RealPath= &FilePath= &filepath= &Path= &path= &inputFile= &url= &urls= &Lang= &dis= &da
sqlserver資料庫的image欄位存入方法 ,讀取
存入方法 private void button1_Click(object sender, EventArgs e) { openFileImage.Filter = "*.jpg|*.JPG|*.gif|*.GIF|*.bmp|
MongoDB:16-MongoDB-索引陣列欄位和索引子文件欄位
MongoDB允許深入文件內部,對巢狀欄位和陣列建立索引;巢狀物件和陣列欄位可以和複合索引中的頂級欄位一起使用,多數情況下與“正常”索引欄位的行為也是一致的。考慮以下文件集合(use
select標籤下option標籤裡value屬性有什麼用以及和text的區別
1:value的用處 <select > <option value = "A">B</option> </select> 其中“A”“B”有何區別,各自代表什麼意思?答案: B是顯示在網頁上的內容 A是實際傳給後臺表單處理程
MapReduce解析之Map,Context,Reduce
HR 中文 明顯 tar 框架 andro 開發 ref session 要理解MapReduce,就必須理解其框架結構,把這三者放在一起講是為了便於大家理解。 也就是兩大組件Map與Reduce 首先看看Map (聲明:這裏感謝Pig2的文章,對我啟發很大,也順便引用一下
MapReduce 中如何處理HBase中的資料?如何讀取HBase資料給Map?如何將結果儲存到HBase中?
MapReduce 中如何處理HBase中的資料?如何讀取HBase資料給Map?如何將結果儲存到HBase中? Mapper類:包括一個內部類(Context)和四個方法(setup,map,cleanup,run); &n
map轉實體類(前提是實體類裡的欄位都是string)
/*** * @param map 需轉換的map物件* @param beanName 轉後的bean型別(需寫包名加類名,否則類找不到),例:"gov.nbeic.nbzwy.entity.qualityerrorcount.QualityErrorCount"* @return * @throws In
28.React使用map循環創建對象綁定click無效解決方法
char pan style 鉆石 function blog lec [] 創建對象 var RechargeBtnEle = React.createClass({ getInitialState: function() { return
Map、List、Set在Java中的各種遍歷方法
try one out 循環 java light size i++ pre 一、Map的4種遍歷 Map<String, String> map = new HashMap<String, String>(); map.put("姓名", "
Map集合 把map 集合 轉成Set的方法
com 一個 刪除 取出 -h lin etl 判斷 表結構 |--Hashtable:底層是哈希表數據結構,是線程同步的。不可以存儲null鍵,null值。 |--HashMap:底層是哈希表數據結構,是線程不同步的。可以存儲null鍵,null值。替代了Hashtab
Sass函數:Sass Maps的函數-map-has-key($map,$key)
color pan googl 語句 布爾值 意思 布爾 提示 ebo map-has-key($map,$key) 函數將返回一個布爾值。當 $map 中有這個 $key,則函數返回 true,否則返回 false。 前面的示例,當 $key 不在 $map 中時,使用
leetcode677+Map sum使用map就行,加上一個starts_with函式
https://leetcode.com/problems/map-sum-pairs/description/ class MapSum { public: map<string, int> pairs; /** Initialize your data str
遍歷map取對應欄位的值
後臺dao層介面: Map<String,Object> detail(IwResultSpot vo); 中間層: //接收為map Map<String,Object> map = this.detail(vo); List list1 = new Arr
Java中的Map集合以及Map集合遍歷例項
文章目錄 一、Map集合 二、Map集合遍歷例項 一、Map集合 Map<K,V>k是鍵,v是值 1、 將鍵對映到值的物件,一
Java基礎 @org.junit.Test-單元測試方法 + 操縱Collection和Map的工具類 : Collections 的sort/binarySearch/max/min等靜態方法
單元測試程式碼: ( 在IDEA中先輸入'@Test '然後根據提示進行自動修訂即可!!執行時直接執行即可! 若有多個單元測試塊的時候,直接把滑鼠放在哪裡就自動在哪裡執行那個單元塊) import java.util.*; /**操縱Collection和Map
Java基礎學習01——Map遍歷Map.Entry
問題描述 前些天遇到了一個疑問,今天終於驗證了一下,現在記錄下來。 問題是這樣的,大家遍歷Map的時候用Map.Entry,通過Map.Entry獲取到key和value,與存入Map當中的key和value是同一個物件嗎? 為了驗證一下這個問題我寫了如下程式碼: public st
關於map巢狀map和map巢狀list(轉載https://blog.csdn.net/mustbehard/article/details/17310043)
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set;
【轉】Map 與 Unordered_map map和unordered_map的差別和使用
map和unordered_map的差別和使用 map和unordered_map的差別還不知道或者搞不清unordered_map和map是什麼的,請見:http://blog.csdn.net/billcyj/article/details/78065438 需要引入的標頭檔案不同m