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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OGNL表达式语言

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OGNL表达式语言 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OGNL:Object Graphic Navigation Language(對象圖導(dǎo)航圖語言)

1、上下文------>ActionContext------>Map集合

OGNL有一個上下文概念,在Struts2中上下文的實現(xiàn)為ActionContext,它就是一個Map結(jié)構(gòu),它實現(xiàn)了java.utils.Map 接口。

OGNL COntext:

  • ValueStack(值棧,它是根對象)
  • parameters
  • request
  • session
  • application
  • attr

Action中的實例變量為什么可以被OGNL訪問呢?

當Struts2接受一個請求時,會迅速創(chuàng)建ActionContext,ValueStack,action 。然后把action存放進ValueStack,所以action的實例變量可以被OGNL訪問。
2、怎么訪問上下文中的對象呢?

訪問上下文(Context)中的對象需要使用#符號標注命名空間,如#application、#session.

特例:OGNL會設(shè)定一個根對象(root對象),在Struts2中根對象就是ValueStack(值棧) 。如果要訪問根對象(即ValueStack)中對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性即可。

3、ValueStack(值棧)為什么特殊

根對象ValueStack的實現(xiàn)類為OgnlValueStack,該對象不是我們想像的只存放單個值,而是存放一組對象。在OgnlValueStack類里有一個List類型的root變量,就是使用他存放一組對象。

OgnlValueStack root變量[action ,Ognl util,......]

在root變量中處于第一位的對象叫棧頂對象。通常我們在OGNL表達式里直接寫上屬性的名稱即可訪問root變量里對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有找到就從第三個對象尋找,依次往下訪問,直到找到為止。

4、為何使用EL表達式能夠訪問valueStack中對象的屬性


原因是Struts2對HttpServletRequest作了進一步的封裝:

public class StrutsRequestWrapper extends HttpServletRequestWrapper {public StrutsRequestWrapper(HttpServletRequest req) {super(req);}public Object getAttribute(String s) {......ActionContext ctx = ActionContext.getContext();Object attribute = super.getAttribute(s);//先從request范圍獲取屬性值if (ctx != null) {if (attribute == null) {//如果從request范圍沒有找到屬性值,即從ValueStack中查找對象的屬性值 ......ValueStack stack = ctx.getValueStack();attribute = stack.findValue(s);......}}return attribute;}}

5、實戰(zhàn)分析

1、訪問Context中的其他對象:

<s:property value="#request.user"/><s:property value="#session.name"/>

2、采用OGNL表達式創(chuàng)建List、Map集合對象

List對象:

<s:set name="list" value="{'第一個','第二個','第三個'}"/><s:iterator value="#list"><s:property/><br/></s:iterator>

#list :因為list放在Context中,和訪問application、request等等一樣,需要使用#

<s:iterator> 標簽有個特點:在迭代集合時候,會把當前迭代對象放在值棧的棧頂

<s:property>中value省略,默認從棧頂查找。

Map:

<s:set name="maps" value="#{'key1':90,'key2':34}"/><s:iterator value="#maps"><s:property value="key"/> = <s:property value="value"/><br/> </s:iterator>

value="#{}" 比set對了一個#

?

3、判斷對象是否存在于集合中

<s:if test="'foo' in {'foo','jia'}"></s:if><s:if test="'foo' not in {'ssss','jia'}">不在 </s:if>

?

轉(zhuǎn)載于:https://www.cnblogs.com/lyjs/p/4984685.html

總結(jié)

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

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

主站蜘蛛池模板: 日本xxxxxxxxx | 99视频在线观看免费 | 国产丝袜美腿一区二区三区 | 三级五月天 | 青青草华人在线 | 黄黄视频在线观看 | 欧美日韩一区二区三区四区 | 91精品在线免费观看 | 国产精品大屁股白浆一区 | 亚洲女人的天堂 | 久久精品aⅴ无码中文字字幕重口 | 寂寞人妻瑜伽被教练日 | 成人亚洲综合 | www.夜夜骑| 国产三级影院 | 污的网站 | 永久免费未满蜜桃 | 综合婷婷| 久久亚州| mm131丰满少妇人体欣赏图 | 成人av高清 | 免费在线观看污网站 | 国产精品一区二区视频 | 亚洲香蕉av| 色综合影视| 日韩精品一二区 | 国产成人无码精品 | 久草成人网 | 欧美视频一区二区在线 | 91国模少妇一区二区三区 | 国产亚洲第一页 | 激情久久网站 | а√天堂资源在线 | 成人黄色短视频在线观看 | 日韩高清成人 | 操天天操 | 亚洲区小说区图片区 | 亚洲国产精品一区二区尤物区 | 超碰123| 亚洲av无码国产精品久久不卡 | 日老女人视频 | 日韩亚洲欧美在线观看 | 97影院手机版 | 亚洲天堂8 | 成人免费毛片网 | 亚洲视频免费观看 | 亚洲视频免费观看 | 精品少妇视频 | 日本一区二区三区视频在线播放 | 免费超碰在线观看 | 国产成人在线视频 | 午夜在线精品偷拍 | 国产麻豆午夜三级精品 | 内地级a艳片高清免费播放 91在线精品一区二区 | 999精品免费视频 | 懂色av中文一区二区三区天美 | 日本老肥婆bbbwbbbwzr | 午夜精品久久久久久久久久蜜桃 | 好吊日精品视频 | 国产欧美日韩中文字幕 | 免费福利影院 | 成年人免费看黄色 | 国产色视频一区二区三区qq号 | 男女啊啊啊视频 | 神马久久香蕉 | 亚洲精品成人av | 不卡av网| 国产在线高清 | 免费亚洲网站 | 久久午夜精品人妻一区二区三区 | 免费中文字幕日韩 | 国产精品xxx在线观看www | 中文字幕三级视频 | 看黄网站在线观看 | 天天爽天天操 | 日韩一区在线看 | 成年女人18级毛片毛片免费 | 嫩草视频在线 | 一级午夜 | 国产精品久久网站 | 欧美精品一区二区三区久久久 | 黄色亚洲视频 | 99碰碰 | 女人又爽又黄免费女仆 | 麻豆国产av超爽剧情系列 | 国产一区视频观看 | 看国产一级片 | 日韩一区二区三区免费在线观看 | 国产在线国偷精品免费看 | 超碰在线免费公开 | 国产精品视频h | 黄色一级片免费观看 | 深夜福利免费视频 | 凹凸福利视频 | 91天天干 | 日韩av免费在线播放 | 丝袜一区二区三区 | 国产精品视频你懂的 | 天天插夜夜|