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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Struts标签和OGNL表达式

發(fā)布時(shí)間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts标签和OGNL表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Struts標(biāo)簽和OGNL表達(dá)式

1.OGNL通過(guò)索引訪問(wèn)ValueStack中的對(duì)象。
[0].name
[1].name
上面使用的索引的方式并不是直接取得指定元素,而是從指定索引開(kāi)始向下搜索。
訪問(wèn)ValueStack里的屬性:${bar}
2.OGNL對(duì)非根對(duì)象屬性的訪問(wèn)前要加#號(hào)
#foo.blash
Struts2的命名對(duì)象,他們與根對(duì)象無(wú)關(guān),只是存在于Stack Context中,所以訪問(wèn)他們時(shí)需要使用#前綴來(lái)指明:
parameters對(duì)象:#parameters['foo'] 或 #parameters.foo
request對(duì)象:#request['foo'] 或 #request.foo
session對(duì)象:#session['foo'] 或 #session.foo
application對(duì)象
attr對(duì)象:按PageContext,request.session.ServletContext的順序?qū)ふ覍?duì)象
3.OGNL集合操作
生成List集合:{e1,e2,e2 ...}
生成Map集合:#{key1:value1,key2:value2 ...}
in 與 notin:
<s:if text="'foo' in {'foo','bar'}">...</s:if>
<s:if text="'foo' notin {'foo','bar'}">...</s:if>
獲取集合子集:
person.relatives.{? #this.gender == 'male'} (問(wèn)號(hào)可以替換為:^,$)
集合后緊跟.{}元素運(yùn)算符用于取出集合的子集,而#this代表集合里的元素
4.如果為<s:iterator .../>標(biāo)簽指定status屬性,即每次迭代時(shí)都會(huì)有一個(gè)IteratorStatus實(shí)例,該實(shí)例包含以下方法:getCount(),getIndex(),isEven(),isOdd(),isFirst(),isLast()
在OGNL表達(dá)式中可以通過(guò) #st.odd, #st.count來(lái)訪問(wèn),st為IteratorStatus的實(shí)例
5.使用iterator迭代Map對(duì)象:
<s:iterator value="集合對(duì)象" status="st">
??? <s:property value="key"/><s:property value="value">
</s:iterator>
6.使用append標(biāo)簽將多個(gè)集合拼接成一個(gè)新集合,然后使用iterator進(jìn)行迭代
<s:append id="newList">
??? <s:param value="集合1"/>
??? <s:param value="集合2"/>
</s:append>
<s:iterator value="#newList">...</s:iterator>
7.generator標(biāo)簽:分割字符串,生成的集合存放在ValueStack棧頂,在標(biāo)簽體中使用iterator迭代,不使用values屬性(默認(rèn)迭代ValueStack棧頂集合),標(biāo)簽結(jié)束,此集合即被刪除。如果指定了此標(biāo)簽的id,則將臨時(shí)生成的集合放置到pageContext屬性中
<s:generator val="字符串">
??? <s:iterator status="st">
??????? <s:property/> 個(gè)人理解:每次迭代都會(huì)把迭代元素放到ValueStack棧頂,使用完后即刪除,<s:property/>默認(rèn)去棧頂元素,去完刪除,然后迭代下一個(gè)
??? </s:iterator>
</s:generator>
8.做XXBean對(duì)象的編輯時(shí),如醫(yī)生編譯,可以實(shí)例化一個(gè)醫(yī)生對(duì)象,并設(shè)置相關(guān)屬性,并將這個(gè)bean push到ValueStack中,跳轉(zhuǎn)到相關(guān)頁(yè)面。
9.struts2 token防止重復(fù)提交的原理:
首先,jsp頁(yè)面在每次加載的時(shí)候都會(huì)生成一個(gè)新GUID,這個(gè)id會(huì)分別存放到頁(yè)面隱藏域和Session中,當(dāng)頁(yè)面提交的時(shí)候,攔截器將對(duì)頁(yè)面隱藏域中的id與session中的id進(jìn)行對(duì)比,如果相同,則刪除session中的id(等待再次請(qǐng)求頁(yè)面時(shí)的再次創(chuàng)建),繼續(xù)執(zhí)行,完成后面的操作。但如果此時(shí)請(qǐng)求失敗,用history.back(-1)返回時(shí),頁(yè)面中的id與session中已經(jīng)不相同,再次提交就會(huì)出現(xiàn)重復(fù)提交的問(wèn)題。這和F5刷新的道理一樣,session中id被刪除后,刷新頁(yè)面,提交上來(lái)的id還是原來(lái)的id,而session中此時(shí)已沒(méi)有id,判斷提交失敗!這才是token解決重復(fù)提交問(wèn)題的原理。
10.struts2中ActionContext內(nèi)置對(duì)象的作用(他們都是Map類型的集合):
parameters 包含當(dāng)前Http請(qǐng)求參數(shù)的Map,也包含通過(guò)<s:param>標(biāo)簽傳進(jìn)的參數(shù)
#parameters.id[0]=request.getParameter("id")
request 包含當(dāng)前HttpServletReqeust的屬性(attribute)的Map
#reqeust.username=request.getAttribute("username");
session 包含當(dāng)前HttpSession的屬性的Map
#session.username=session.getAttribute("username");
application 包含當(dāng)前ServletContext的屬性的Map
#application.username=application.getAttribute("username");
attr 用于按request->session->application順序訪問(wèn)其屬性
11.在action中需要真正使用request,session,application對(duì)象是,action要實(shí)現(xiàn)ServletRequestAware, SessionAware, ServletContextAware接口

posted on 2010-03-15 14:57 macoo 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/macooma/archive/2010/03/15/1686240.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Struts标签和OGNL表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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