OGNL表達(dá)式
? ? ? ?自動導(dǎo)航對象的結(jié)構(gòu)并訪問和設(shè)置對象數(shù)據(jù)连舍,核心對象是ognl上下文(一個Map容器)索赏,可以存放多的對象
特點:
1.支持對象方法的調(diào)用
2.支持靜態(tài)方法的調(diào)用
3.支持變量的賦值
4.可以操作集合數(shù)據(jù)
Struts框架中的OGNL
? ? ?struts2中ognl作用與struts2中的ActionContext参滴。
? ? ? 接收一個action請求時會創(chuàng)建ActionContext對象并實例化
獲取值棧對象:${user.name}
獲取application:#application.name或#application.['name'] ? ?:相當(dāng)于調(diào)用application.getAttribute("name");
獲取request:#request.name或#request.['name']
獲取session:#session.name或#session.['name']
獲取parameters:#parameters.name或#parameters.['name']
獲取attr:不指定范圍時按page, request, session, application 次序搜索:#attr.name或#attr.['name']
? ? ? ? ?在使用Struts2標(biāo)簽時需要引用Struts2的標(biāo)簽庫砾赔,在jsp頭部通過<%@ taglib prefix="s" uri="/struts-tags"%>
訪問靜態(tài)方法與屬性
調(diào)用Bean.NAME靜態(tài)屬性 ?: @com.lyq.bean.Bean@NAME
調(diào)用靜態(tài)方法: ? ? ? ? ? ?@com.lyq.bean.Bean@greeting()
默認(rèn)情況下struts2不允許ognl 調(diào)用靜態(tài)方法。需要在struts.xml中更該:<constant name="struts.ognl,allowStaticMethodAccess" value="true">
訪問List杂拨,Set,Map集合
List集合:list[0]\
Set集合:無序集合不能通過下標(biāo)值方式訪問
Map集合:map.key或map.['key'] ? ? ? ? ? ? 訪問所有的key:map.keys
判斷元素是否為空:collection.isEmpty() ? ? ? ? ? collection.size
投影和選擇
投影:獲取集合中某列的所有數(shù)據(jù) ? ? 值棧中: list.{數(shù)據(jù)} ? ? 非值棧:#list.name
選擇:獲取集合中滿足條件的選擇操作:值棧:list.{?#this.age>10} ? 非值棧:#list.{?#this.age>10}\
?:獲取滿足指定條件的所有元素
^:獲取滿足指定條件的第一個元素
$:獲取指定條件的最后一個元素
Struts2標(biāo)簽庫
1.數(shù)據(jù)標(biāo)簽
1.property:獲取數(shù)據(jù)值并將數(shù)據(jù)直接輸出到頁面中
2.set:定義百年靈并賦值及設(shè)置變量的作用域
scrope:設(shè)置變量作用域(application,request,session,page,action(默認(rèn)))
value:變量的值
var:變量名稱
<s:set var="username" value="測試set標(biāo)簽" scrope="request”></s:set>
<s:property default="沒有數(shù)據(jù)" value="#request.username"/>
3.a:構(gòu)建超鏈接
4.param:對參數(shù)賦值
5.action:執(zhí)行action請求并選擇返回結(jié)果輸出到當(dāng)前jsp頁面中
6.push:將對象或值壓到值棧中并放置到頂部 ? ? ?<s:push value="#request.student"/>
7.date:格式化日期時間
8.include:包含一個頁面:<%@ include file="一個jsp頁面或者servlet"%>
9.url標(biāo)簽:
2.控制標(biāo)簽
1.if:<s:if> ? ? <s:elseif> ? ? ? <s:else>
2.iterator:用于迭代數(shù)據(jù) ? begin:起始位置 ? ?end結(jié)束位置 ? status迭代狀態(tài) ? step每次迭代增加量 ?value:集合或數(shù)組對象 ? var迭代元素變量策橘,指定后迭代的變量將壓入到值棧中
元素數(shù):st.count ? ?是否為第一個元素 ? st.first ? ?是否為最后一個元素: st.last ?當(dāng)前索引值:st.index ?索引值是否為偶數(shù):st.even ?索引值是否為奇數(shù):st.odd
攔截器
? ? ? ?攔截器可以動態(tài)增強action對象的功能,動態(tài)的作用于Action和Result之間蚌堵,動態(tài)的為action和result添加新功能
攔截器對Action對象進(jìn)行攔截操作的順序圖:
使用攔截器
直接使用AbstractInterceptor對象實現(xiàn)Interceptory接口?
數(shù)據(jù)驗證機(jī)制
手動驗證:ActionSupport對Validateable接口進(jìn)行了實現(xiàn),但對validate()方法是一個空實現(xiàn)泻蚊,通過validate()方法驗證數(shù)據(jù)有效性時直接重寫validate()
驗證文件命名規(guī)則:名稱必須是ActoinName-validation.xml或ActionName-AliasName-validation.xml? ? ? ? ? ? ActoinName 是Action對象的名稱? ? ? ? ? ? AliasNameAction配置的名稱
以ActoinName-validation.xml命名數(shù)據(jù)的驗證會作用到整個Action對象中孽糖,并驗證Action對象的請求業(yè)務(wù)處理方法,適用于action對象處理方法單一或驗證處理規(guī)則相同\
以ActionName-AliasName-validation.xml命名適用于多個請求處理方法