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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

OGNL基本使用

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

OGNL基本使用

基本介紹

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

Struts2框架使用OGNL作為默認(rèn)的表達(dá)式語言

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

OGNL的要素

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

表達(dá)式

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

要想使用OGNL表達(dá)式來輸出數(shù)據(jù),需要借助struts2的標(biāo)簽實現(xiàn)。

根對象(Root)

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

Context對象

實際上OGNL的取值還需要一個上下文環(huán)境。設(shè)置了Root對象,OGNL可以對Root對象進(jìn)行取值或?qū)懼档炔僮?#xff0c;Root對象所在環(huán)境就是OGNL的上下文環(huán)境(Context)。上下文環(huán)境規(guī)定了OGNL的操作在哪里進(jìn)行。上下文環(huán)境Context是一個Map類型的對象,在表達(dá)式中訪問Context中的對象,需要使用"# "號加上對象名稱,即#"對象名稱"的形式。

思維導(dǎo)圖


在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表達(dá)式,主要是在JSP頁面中獲取值棧中的值。

使用步驟

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

案例

<%@ 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表達(dá)式的最基本使用</title>
</head>
<body>
<%--1、輸出一個字符串到瀏覽器上。需要借助于struts2的標(biāo)簽來輸出<s:property value="" />它的作用就是把value屬性的取值所對應(yīng)的內(nèi)容輸出到瀏覽器上value屬性取值是一個OGNL表達(dá)式--%>01.<s:property value="OGNLExpression"/>
<hr/>
<%--2、使用s:property標(biāo)簽把OGNLExpression輸出到瀏覽器上把一個OGNL表達(dá)式強制看成是一個普通字符串:簡單寫法:用引號擴起來。到底使用單引號還是雙引號是由外層引號決定的。標(biāo)準(zhǔn)寫法:用%{''}或%{""}把表達(dá)式括起來,強制轉(zhuǎn)成字符串。
--%>02.<s:property value='%{"OGNLExpression4"}'/>
<hr/>
<%--3、獲取OGNLExpression字符串的長度。需要使用s:property標(biāo)簽OGNL表達(dá)式非常的靈活,他可以支持普通方法的調(diào)用。--%>03.<s:property value="'OGNLExpression'.length()"/>
<hr/>
<%--4、OGNL表達(dá)式支持訪問靜態(tài)成員:靜態(tài)變量:書寫要求:  @包名.包名..類名@屬性名稱靜態(tài)方法:書寫要求:  @包名.包名..類名@方法名稱Struts2框架默認(rèn)是不支持訪問靜態(tài)方法的。要想支持訪問,需要開啟。開啟的方式就是在配置文件中配置。在struts.xml中配置<!-- 開啟OGNL的靜態(tài)方法訪問 --><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表達(dá)式可以操作集合:List/Map --%>使用原始的表單輸出一組性別的單選按鈕:<br/>性別:<input type="radio" name="gender" value="男"/>男<input type="radio" name="gender" value="女"/>女<br/>使用struts2的表單標(biāo)簽輸出一組性別單選按鈕<br/><%--s:radio標(biāo)簽的list屬性取值是一個OGNL表達(dá)式。{}就相當(dāng)于創(chuàng)建了一個集合:List gender = new ArrayList();{'男','女'}就相當(dāng)于gender.add("男");gender.add("女");當(dāng)服務(wù)器運行時,會把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的表單標(biāo)簽輸出一組性別單選按鈕<br/><%--#{'male':'男','female':'女'}就相當(dāng)于創(chuàng)建了一個Map注意:使用OGNL創(chuàng)建map,必須是#{key:value,key:value}--%><s:radio list="#{'male':'男','female':'女'}" name="gender" label="性別"></s:radio>
</body>
</html>

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。