OGNL (Object-Graph Navigation Language)的縮寫,簡稱對象圖導航語言。
OGNL表達式的特特點:
>能夠取對象的屬性,也能調用對象的方法。
>能訪問靜方法,靜態屬性。
>能訪問值棧以及Stack Context
>能操作集合對象
>支持賦值,運算操作,字段類型轉化
(1).值棧可以理解為一個存儲數據的Map,其中主要存儲了當前Action的實例。
(2).當struts2接收到請求後就會創建相應的Action實例來處理請求。
(3).Action會把db中讀取的數據保存到Action中定義的屬性中。
(4).Struts2會把這個Action保存到值棧中,以供GONL訪問。
(5).Action處理完返回jsp頁面信息後,可以使用<s:debug/>標簽查看值棧中信息。
查看值棧中信息,需要在jsp頁面中引入tablib,示例如下:
<%@ taglib uri="/struts-tags" prefix="s"%>
<s:property value="username">
上例用ognl訪問Action中的數據,那麼如何使用ognl訪問request,session,Application等呢?
訪問Stack Context需要加上"#"符號,如訪問session中的userName如下:
<s:property value="#session.userName"/>
Action中經常返回集合,那麼如何訪問呢?
在jsp頁面中可以使用一下代碼來訪問集合:
(1).訪問list集合下標為0的元素。
<s:property value="userList[0]"/>
(2).訪問List集合的第一個元素對象的屬性,如user.userName的值:
<s:property value="userList[0].userName"/>
(3).獲取List集合的大小
<s:property value="userList.size()"/>
(4).獲取List集合是否為空
<s:property value="userList.isEmpty()">
(5).獲取map集合中key為"m1"的value
<s:property value="userMap['m1']"/>
<s:property value="userMap.m1"/>
(6).獲取map的鍵的集合
<s:property value="userMap.keys"/>
(7).獲取map的值的集合
<s:property value="userMap.values"/>
(8).獲取map的值對數量
<s:property value="userMap.size()"/>
(9).獲取map集合是否為空
<s:property value="userMap.isEmpty"/>
(10).獲取set集合,由於set無序,所以先轉化為數組
<s:property value="userSet.toArray()[0]"/>
struts2提供的標簽可分為一下幾類"
1.通用標簽
(1).數據標簽
(2).控制標簽
2.UI標簽
3.Ajax標簽
使用struts2提供的標簽前需要在jsp頁面中引入taglib指令:
<%@ taglib uri="/struts-tags" prefix="s"%>
<s:property value="username">標簽:
value:用來獲取OGNL表達式的值。
default:如果屬性返回值為空時候,任然輸入結果。
escapeHtml:是否轉義html,默認取值為true,
<s:debug/>
查看值棧和Stack Context
<s:date name="nowDate" fromat="yyyy-MM-dd">:用於格式化輸出一個日期
name:被格式話的值,必須設置。
format:用於日期顯示的格式:如:"yyyy-MM-dd HH:mm:ss"
<s:set var="name" value="user.userName" scope="session"/>
對設置的表達式求值,並將結果賦值給特定作用域的某個變量。
var:變量名,value:設置給變量的值,scope:變量的生存周期。
<s:url value="http://www.cnblogs.com/izhongwei" var="url"/>
用來生成一個url,主要的屬性有:
var:該url名稱,如果指定這個屬性這url標簽就不會在頁面生成字符串。
action:要訪問的Action名稱。
value:要訪問的目標,如果action不指定,就使用value作為url的地址的值。
<s:a>用來生成html的<a>標簽<s:a href="${#url}">超鏈接</s:a>
<s:param>:為其他標簽添加參數化設置
<s:url value="http://www.cnblogs.com/izhongwei" var="url">
<s:param name="str" value="accp"></s:param>
</s:url>
<s:a href="%{#url}">超鏈接</s:a>
生成後的html代碼是:<a href="http://www.cnblogs.com/izhongwei?str="accp"">超鏈接</a>
<s:include>:類似與jsp的動作標簽<jsp:include>
<s:include value="include.jsp"/>
<s:if>,<s:elseif>,<s:else>
<s:iterator>主要用於對集合進行循環:
1.value:被循環訪問的集合
2.var:變量名稱,用來引用當前循環訪問的集合元素。
3.status:返回當前循環的各種信息
count:集合含有多少個對象。
index:正在循環這一項的索引。
even:當前遍歷到的對象是否處於列表的偶數索引位置。
odd:當前遍歷到的對象是否處於列表的奇數索引位置。
<s:iterator var="user" value="userList" status="status">
<s:if test="#status.even"><tr bgcolor="yellow"></s:if>
</s:iterator>
struts2 UI標簽可以通過設置不通的主題生成不通的風格。主題有simple,xhtml,css_xhtml,ajax;
可以在struts.xml中統一配置設置主題格式:
<constant name="struts.ui.theme" value="simple">
<s:form>:對應html中的<form>:
屬性有:name,action,method
<s:textfield>對應html中的<input type="text">單行文本框
屬性:name,value,maxlength,readonly
<s:textarea>對應html中的<textarea>,即多行文本框。
屬性:name,value,cols,rows,readonly
<s:submit>對應html中的<input type="submit">他的基本屬性為value
<s:select>下拉框
屬性:name(下拉框名稱),list(生成下拉框的集合),listKey(生產下拉項的value屬性)
listValue(生成下拉項顯示的文字)
<s:doubleselect>:用於生成兩個聯動的下拉框。
Struts2提供了一套完整的Ajax解決方案,datetimepicker日期空間標簽示例