el是表達式語言,ognl也是表達式語言的一種,兩者都是用來訪問對象的屬性的。。 ognl的名字的來頭是—-圖對象語言,這個不重要
el在jsp里面不用任何配置,直接就可以用,用法也很簡單,基本格式就是 ${屬性名字}默認是輸出pageScope范圍的屬性 可以指定屬性范圍
${pageScope.info}${requestScope.info}${sessionScope.info}${applicationScope.info}除了訪問屬性,還可以接受參數
${param.參數名稱}接受一組參數${paramValues.參數名稱}如果訪問的對象是集合,可以通過下標[]訪問,也可以通過.符號訪問
list集合 ${info[0]}或者${info.0}map集合 ${info["key"]}或者${ info.key}再來說ognl表達式 相對EL表達式,它提供了平時我們需要的一些功能,如: * 支持對象方法調用,如xxx.sayHello(); * 支持類靜態方法調用和值訪問,表達式的格式為@[類全名(包括包路徑)]@[方法名 | 值名],例如: @java.lang.String@format(‘foo%s’, ‘bar’)或@cn.itcast.Constant@APP_NAME; * 操作集合對象。 * Ognl 有一個上下文(Context)概念,說白了上下文就是一個MAP結構,它實現了java.utils.Map接口,在Struts2中上下文(Context)的實現為ActionContext,下面是上下文(Context)的結構示意圖
ognl context 就是 action context
當Struts2接受一個請求時,會迅速創建ActionContext,ValueStack,action 。然后把action存放進ValueStack,所以action的實例變量可以被OGNL訪問
<s:PRoperty value="name"/>ognl表達式要和struts標簽配合使用,這里的”name”可以就可以輸入ognl表達式
由于ValueStack(值棧)是Struts2中OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達式訪問ValueStack(值棧)中對象的屬性: ${foo} //獲得值棧中某個對象的foo屬性
如果訪問其他Context中的對象,由于他們不是根對象,所以在訪問時,需要添加#前綴。 application對象:用于訪問ServletContext,例如#application.userName或者#application[‘userName’],相當于調用ServletContext的getAttribute(“username”)。
session對象:用來訪問HttpSession,例如#session.userName或者#session[‘userName’],相當于調用session.getAttribute(“userName”)。
request對象:用來訪問HttpServletRequest屬性(attribute)的Map,例如#request.userName或者#request[‘userName’],相當于調用request.getAttribute(“userName”)。
parameters對象:用于訪問HTTP的請求參數,例如#parameters.userName或者#parameters[‘userName’],相當于調用request.getParameter(“username”)。
attr對象:用于按page->request->session->application順序訪問其屬性。
采用OGNL表達式創建List/Map集合對象
如果需要一個集合元素的時候(例如List對象或者Map對象),可以使用OGNL中同集合相關的表達式。 使用如下代碼直接生成一個List對象:
Set標簽用于將某個值放入指定范圍。 scope:指定變量被放置的范圍,該屬性可以接受application、session、request、page或action。如果沒有設置該屬性,則默認放置在OGNL Context中。 value:賦給變量的值.如果沒有設置該屬性,則將ValueStack棧頂的值賦給變量。
采用OGNL表達式判斷對象是否存在于集合中,所以struts的判斷標簽還是很有用的,至于復雜的邏輯控制標簽,switch,while,for什么的,我就不想去記那些該死的標簽了,只要知道用判斷標簽,輸出標簽,表單標簽,就差不多了
對于集合類型,OGNL表達式可以使用in和notin兩個元素符號。其中,in表達式用來判斷某個元素是否在指定的集合對象中;not in判斷某個元素是否不在指定的集合對象中,如下所示。
OGNL表達式的投影功能
除了in和notin之外,OGNL還允許使用某個規則獲得集合對象的子集,常用的有以下3個相關操作符。 ?:獲得所有符合邏輯的元素。 ^:獲得符合邏輯的第一個元素。 $:獲得符合邏輯的最后一個元素。
新聞熱點
疑難解答