Struts2 - OGNL表示式和Struts2標籤庫

襲冷發表於2014-11-15

一、OGNL表示式

    訪問Action的普通屬性:

<s:property value="msg"/>
    訪問Action中物件的普通屬性:
<s:property value="user.name"/>
    訪問Action中物件的普通方法:
<s:property value="user.info()"/>
    訪問Action中普通方法:
<s:property value="actionMethod()"/>

    訪問靜態方法:

<s:property value="@com.xilen.action.StaticCls@stcSay()"/>
    訪問靜態屬性:
<s:property value="@com.xilen.action.StaticCls@stcMsg"/>
    訪問Math類的靜態方法:
<s:property value="@@max(2,3)"/>

    訪問Action中List|Set|Map:

<s:property value="userList"/>

    訪問容器的大小:

<s:property value="map.size()"/>
    訪問List中元素的某個屬性的集合(如所有user的name):
 <s:property value="userList.{name}"/>
    訪問List中的元素(物件)的某個屬性的集合中的特定值:
<s:property value="userList.{name}[1]"/>

    訪問List中的某個元素:

 <s:property value="userList[0]"/>
    訪問Map中所有的key:
<s:property value="map.keys"/>
    訪問Map中所有的value:
<s:property value="map.values"/>

    訪問指定的請求引數(注意:每一個請求引數都是一個陣列):

<s:property value="#parameters.parm"/>  
二、Struts2標籤庫

    1、<s:property/>

        一般格式:

            <s:property value="" default="" escape=""/>

        屬性說明:

            value:預設當OGNL表達式處理,如果只要其當作字串需加單引號

            defaulut:預設值,值當作字串

            escape:表示對於得到的的字串是否解析為HTML,預設為true(不解析)

        使用示例:

	<!--獲取ValueStack中的物件-->
	<s:property value="user.name"/>
	
	<!--獲取StackContext中的物件-->
	<s:property value="#request.id"/>
    2、<s:if test=""/>、<s:elseif test=""/>和<s:else/>

	<!-- 數值比較 -->
	<s:if test="1<2"></s:if>
	
	<!-- 字串比較 -->
	<s:if test="'abc'=='abc'"></s:if>
	
	<!-- 獲取parameters中的值做比較(注: #parameters.parm=='parm'不能實現比較) -->
	<s:if test="#parameters.parm[0]=='parm'"></s:if>
	
	<!-- 獲取Action中的屬性做比較  -->
	<s:if test="user.name=='admin'"></s:if>
    3、<s:iterator/>

        一般格式:

            <s:iterator value="userList" var="u" status="stat" >

        屬性說明:

            value:OGNL表示式

            var:將遍歷的當前物件別名後放至StackContext中

            status:當前遍歷的資訊,通過其可取得當前遍歷的count(統計,始於1)、index(索引,始於0)、

                    even(是否偶數),odd(是否奇數)等

            補:另有begin(開始)、end(結束)、step(步長)等

        使用示例

	<!-- 遍歷普通List -->
 	<s:iterator value="list" status="stat" >
 		<s:property value="#stat.index"/> <!-- 當前索引 -->
 		<s:property value="#stat.odd"/> <!-- 是否為奇數次遍歷  -->
		<s:property /> <!-- 獲取當前物件 -->
	</s:iterator>
	
	<!-- 遍歷物件List -->
	<s:iterator value="userList" var="user" status="stat" >	
		<s:property value="#user.name" /> <!-- 獲取屬性 -->
		<s:property value="#user.name.toUpperCase()" /> <!-- 對屬性新增處理 -->
	</s:iterator>
	
	<!-- 遍歷Map -->
	<s:iterator value="map" status="stat" >
		<s:property /> <!-- 獲取當前key=value -->
		<s:property value="key" /> <!-- 獲取當前key -->
		<s:property value="value" /> <!-- 獲取當前value -->
	</s:iterator>
三、補充

    1、使用標籤庫,jsp需新增:

<%@ taglib prefix="s" uri="/struts-tags" %>

    2、要訪問靜態類,struts需配置:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

 

 

相關文章