日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

OGNL基本使用

發布時間:2023/12/4 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 OGNL基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OGNL基本使用

基本介紹

OGNL是Object-Graph Navigation Language(對象圖導航語言)的縮寫,它是一種功能強大的表達式語言,通過簡單一致的表達式語法,可以存取對象的任何屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能、它使用相同的表達式去存取對象的屬性。

Struts2框架使用OGNL作為默認的表達式語言

  • OGNL是一種比EL強大很多倍的語言,支持對象方法調用,支持靜態方法和字段訪問,支持賦值操作等等。
  • xwork提供了OGNL表達式。
  • 其jar包為ognl-x.x.x.jar。

OGNL的要素

OGNL有三大要素,分別是表達式、根對象、Context對象。

表達式

表達式是整個OGNL的核心,OGNL會根據表達式去對象中取值。所有OGNL操作都是針對表達式解析后進行的。它表明了此次 OGNL 操作要做什么。表達式就是一個帶有語法含義的字符串,這個字符串規定了操作的類型和操作的內容。OGNL支持大量的表達式語法,不僅支持這種"鏈式"對象訪問路徑,還支持在表達式中進行簡單的計算。

要想使用OGNL表達式來輸出數據,需要借助struts2的標簽實現。

根對象(Root)

?????Root對象可以理解為OGNL的操作對象,表達式規定了"做什么",而Root對象則規定了"對誰操作"。OGNL稱為對象圖導航語 言,所謂對象圖,即以任意一個對象為根,通過OGNL可以訪問與這個對象關聯的其它對象。

Context對象

實際上OGNL的取值還需要一個上下文環境。設置了Root對象,OGNL可以對Root對象進行取值或寫值等操作,Root對象所在環境就是OGNL的上下文環境(Context)。上下文環境規定了OGNL的操作在哪里進行。上下文環境Context是一個Map類型的對象,在表達式中訪問Context中的對象,需要使用"# "號加上對象名稱,即#"對象名稱"的形式。

思維導圖


在Action中使用OGNL

    // 訪問對象的方法@Testpublic void run1() throws OgnlException{OgnlContext context = new OgnlContext();// 獲取對象的方法Object obj = Ognl.getValue("'helloworld'.length()", context, context.getRoot());System.out.println(obj);}// 獲取OGNL上下文件的對象@Testpublic void run3() throws OgnlException{OgnlContext context = new OgnlContext();context.put("name", "美美");// 獲取對象的方法Object obj = Ognl.getValue("#name", context, context.getRoot());System.out.println(obj);}// 從root棧獲取值@Testpublic void demo3() throws OgnlException{OgnlContext context = new OgnlContext();Customer c = new Customer();c.setCust_name("haha");context.setRoot(c);String name = (String) Ognl.getValue("cust_name", context, context.getRoot());System.out.println(name);}

在頁面中使用OGNL

Struts2引入了OGNL表達式,主要是在JSP頁面中獲取值棧中的值。

使用步驟

  • 需要先引入Struts2的標簽庫
    • <%@ taglib prefix="s" uri="/struts-tags" %>
  • 使用Struts2提供的標簽庫中的標簽
    • <s:property value="OGNL表達式"/>

案例

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>OGNL表達式的最基本使用</title>
</head>
<body>
<%--1、輸出一個字符串到瀏覽器上。需要借助于struts2的標簽來輸出<s:property value="" />它的作用就是把value屬性的取值所對應的內容輸出到瀏覽器上value屬性取值是一個OGNL表達式--%>01.<s:property value="OGNLExpression"/>
<hr/>
<%--2、使用s:property標簽把OGNLExpression輸出到瀏覽器上把一個OGNL表達式強制看成是一個普通字符串:簡單寫法:用引號擴起來。到底使用單引號還是雙引號是由外層引號決定的。標準寫法:用%{''}或%{""}把表達式括起來,強制轉成字符串。
--%>02.<s:property value='%{"OGNLExpression4"}'/>
<hr/>
<%--3、獲取OGNLExpression字符串的長度。需要使用s:property標簽OGNL表達式非常的靈活,他可以支持普通方法的調用。--%>03.<s:property value="'OGNLExpression'.length()"/>
<hr/>
<%--4、OGNL表達式支持訪問靜態成員:靜態變量:書寫要求:  @包名.包名..類名@屬性名稱靜態方法:書寫要求:  @包名.包名..類名@方法名稱Struts2框架默認是不支持訪問靜態方法的。要想支持訪問,需要開啟。開啟的方式就是在配置文件中配置。在struts.xml中配置<!-- 開啟OGNL的靜態方法訪問 --><constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
--%>04.<s:property value="@java.lang.Integer@MAX_VALUE"/><br/>05.<s:property value="@java.lang.Math@random()"/>
<hr/>
<%--5、OGNL表達式可以操作集合:List/Map --%>使用原始的表單輸出一組性別的單選按鈕:<br/>性別:<input type="radio" name="gender" value="男"/>男<input type="radio" name="gender" value="女"/>女<br/>使用struts2的表單標簽輸出一組性別單選按鈕<br/><%--s:radio標簽的list屬性取值是一個OGNL表達式。{}就相當于創建了一個集合:List gender = new ArrayList();{'男','女'}就相當于gender.add("男");gender.add("女");當服務器運行時,會把list的取值遍歷生成<input type="radio"/>--%><s:radio list="{'男','女'}" name="gender" label="性別"></s:radio><hr/>使用原始的表單輸出一組性別的單選按鈕:<br/>性別:<input type="radio" name="gender" value="male"/>男<input type="radio" name="gender" value="female"/>女<br/>使用struts2的表單標簽輸出一組性別單選按鈕<br/><%--#{'male':'男','female':'女'}就相當于創建了一個Map注意:使用OGNL創建map,必須是#{key:value,key:value}--%><s:radio list="#{'male':'男','female':'女'}" name="gender" label="性別"></s:radio>
</body>
</html>

總結

以上是生活随笔為你收集整理的OGNL基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。