OGNL表示式(轉載) OGNL表示式
阿新 • • 發佈:2018-11-04
OGNL表示式(轉載)
1.什麼是OGNL
OGNL:Object Graphic Navigation Language(物件圖導航語言)
它是Struts2中預設的表示式語言。使用表示式需要藉助Struts2的標籤.
OGNL與EL的區別:
EL/JSTL 數學運算等等表示式: 都有一個明確的返回值,都只能取值。
OGNL表示式: 它不僅可以取值,還可以賦值(賦值操作只能由Struts來完成)
OGNL表示式的寫法: 屬性.屬性.屬性的方式 <input type="text" name="user.user"/>
OGNL表示式的基本使用:
- 使用s:property標籤輸出內容
- 訪問普通方法
- 訪問靜態方法
- 訪問靜態屬性
- 操作集合(List AND Map)
<title>Struts2OGNL表示式的基本使用</title> </head> <body> <!-- a、使用s:property標籤輸出內容:要想輸出內容到頁面得使用Struts2的標籤庫 value屬性:把value取值所對應的內容輸出到頁面 若想直接輸出文字,則需要用引號引起來。 --> 輸出基本內容:<s:property value="'OGNLExpresession'"/> <hr/> <!-- b、訪問普通方法 --> 輸出字串的長度:<s:property value="'OGNLExpresession'.length()"/> <br/> 輸出轉大寫字元:<s:property value="'OGNLExpresession'.toUpperCase()"/> <br/> 切割字串:<s:property value="'OGNLExpresession'.split('L')"/> <hr/> <!-- c、訪問靜態屬性 語法 : @類的全路徑@靜態欄位 --> 輸出整數的最大值:<s:property value="@[email protected]_VALUE"/> <hr/> <!-- d、訪問靜態方法 語法: @類的全路徑@靜態方法 注意: 使用靜態方法時,需要在struts.xml中開啟靜態方法呼叫的開關。 --> 輸出一個隨機數:<s:property value="@[email protected]()"/> <hr/> <!-- e、操作集合(List和Map) 語法: 宣告list集合:{"aa","bb"} 宣告map集合:#{"key":"value","key":"value"} --> 輸出html普通標籤的單選按鈕:<br/> <input type="radio" name="sex" value="男"/>男 <input type="radio" name="sex" value="女"/>女<br/> 使用Struts2標籤輸出單選按鈕:list集合方式<br/> <s:radio list="{'男','女'}" name="sex"></s:radio><br/> 使用Struts2標籤輸出單選按鈕:map方式<br/> <s:radio list="#{'男':'男','女':'女' }" name="sex"/> </body>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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> 使用EL表示式:<br/> ${c.username}<br/> ${requestScope.p }<br/> ${sessionScope.p }<br/> ${applicationScope.p }<br/> <hr/> 使用OGNL表示式:<br/> <!-- 如果是在action動作類中直接宣告的變數,OGNL直接取值即可。 --> <!-- 在域物件中的資料需要使用#開頭 --> <!-- 注:如果物件在action動作類中直接宣告,則取值需要使用c.username 如果物件在方法中手動新增到valueStack物件中,則取值不需要c.username,直接username即可。 --> <s:property value="c.username"/><br/> <%-- <s:property value="[1].username"/><br/> --%> <s:property value="#request.p"/><br/> <s:property value="#session.p"/><br/> <s:property value="#application.p"/><br/> <s:property value="#attr.p"/><br/> <hr/> <!-- 不寫value屬性:獲得的是棧頂資料 --> <s:property/> <s:debug/> </body> </html>
<%@page import="com.opensymphony.xwork2.util.ValueStack"%> <%@page import="com.opensymphony.xwork2.ActionContext"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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> <!-- 在頁面檢視除錯資訊 --> ${ username}<br/> <s:debug/> <s:property value="username"/><br/> == vs.findValue("username"); <s:property value="[1].username"/><br/> <s:property value="#session.p"/><br/> <s:property value="#application.p"/> <hr/> <% ActionContext ac = ActionContext.getContext(); ValueStack vs = ac.getValueStack(); String name = (String)vs.findValue("username"); out.print(name); String p = (String)vs.findValue("#session.p"); out.print(p); %> </body> </html>
1.什麼是OGNL
OGNL:Object Graphic Navigation Language(物件圖導航語言)
它是Struts2中預設的表示式語言。使用表示式需要藉助Struts2的標籤.
OGNL與EL的區別:
EL/JSTL 數學運算等等表示式: 都有一個明確的返回值,都只能取值。
OGNL表示式: 它不僅可以取值,還可以賦值(賦值操作只能由Struts來完成)
OGNL表示式的寫法: 屬性.屬性.屬性的方式 <input type="text" name="user.user"/>
OGNL表示式的基本使用:
- 使用s:property標籤輸出內容
- 訪問普通方法
- 訪問靜態方法
- 訪問靜態屬性
- 操作集合(List AND Map)
<title>Struts2OGNL表示式的基本使用</title> </head> <body> <!-- a、使用s:property標籤輸出內容:要想輸出內容到頁面得使用Struts2的標籤庫 value屬性:把value取值所對應的內容輸出到頁面 若想直接輸出文字,則需要用引號引起來。 --> 輸出基本內容:<s:property value="'OGNLExpresession'"/> <hr/> <!-- b、訪問普通方法 --> 輸出字串的長度:<s:property value="'OGNLExpresession'.length()"/> <br/> 輸出轉大寫字元:<s:property value="'OGNLExpresession'.toUpperCase()"/> <br/> 切割字串:<s:property value="'OGNLExpresession'.split('L')"/> <hr/> <!-- c、訪問靜態屬性 語法 : @類的全路徑@靜態欄位 --> 輸出整數的最大值:<s:property value="@[email protected]_VALUE"/> <hr/> <!-- d、訪問靜態方法 語法: @類的全路徑@靜態方法 注意: 使用靜態方法時,需要在struts.xml中開啟靜態方法呼叫的開關。 --> 輸出一個隨機數:<s:property value="@[email protected]()"/> <hr/> <!-- e、操作集合(List和Map) 語法: 宣告list集合:{"aa","bb"} 宣告map集合:#{"key":"value","key":"value"} --> 輸出html普通標籤的單選按鈕:<br/> <input type="radio" name="sex" value="男"/>男 <input type="radio" name="sex" value="女"/>女<br/> 使用Struts2標籤輸出單選按鈕:list集合方式<br/> <s:radio list="{'男','女'}" name="sex"></s:radio><br/> 使用Struts2標籤輸出單選按鈕:map方式<br/> <s:radio list="#{'男':'男','女':'女' }" name="sex"/> </body>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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> 使用EL表示式:<br/> ${c.username}<br/> ${requestScope.p }<br/> ${sessionScope.p }<br/> ${applicationScope.p }<br/> <hr/> 使用OGNL表示式:<br/> <!-- 如果是在action動作類中直接宣告的變數,OGNL直接取值即可。 --> <!-- 在域物件中的資料需要使用#開頭 --> <!-- 注:如果物件在action動作類中直接宣告,則取值需要使用c.username 如果物件在方法中手動新增到valueStack物件中,則取值不需要c.username,直接username即可。 --> <s:property value="c.username"/><br/> <%-- <s:property value="[1].username"/><br/> --%> <s:property value="#request.p"/><br/> <s:property value="#session.p"/><br/> <s:property value="#application.p"/><br/> <s:property value="#attr.p"/><br/> <hr/> <!-- 不寫value屬性:獲得的是棧頂資料 --> <s:property/> <s:debug/> </body> </html>
<%@page import="com.opensymphony.xwork2.util.ValueStack"%> <%@page import="com.opensymphony.xwork2.ActionContext"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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> <!-- 在頁面檢視除錯資訊 --> ${ username}<br/> <s:debug/> <s:property value="username"/><br/> == vs.findValue("username"); <s:property value="[1].username"/><br/> <s:property value="#session.p"/><br/> <s:property value="#application.p"/> <hr/> <% ActionContext ac = ActionContext.getContext(); ValueStack vs = ac.getValueStack(); String name = (String)vs.findValue("username"); out.print(name); String p = (String)vs.findValue("#session.p"); out.print(p); %> </body> </html>