1 Struts2何時將Action的對象放入值棧中?
放入時間:在調用Action類的Action方法時,但在之前會進行如下:
-->先創建一個StrutsActionProxy對象
-->在創建StrutsActionProxy之後,對其進行初始化時,把Action對象放入值棧中。
2 *property標籤
用來輸出值棧內,某個對象的屬性值。
<body>
<s:debug></s:debug>
<br>
s:property:打印值棧中對象的屬性值<br>
<s:property value="productName"/>
<br>
對於Map棧,打印reques session application的某個屬性值,或者某個請求參數值
<br>
<s:property value="#session.date"/>
<br>打印某個請求參數(請求參數是數組對象):<br>
<s:property value="#parameters.name[0]"/>
</body>
3.url標籤
url標籤用來動態創建一個URL
<br><br>
s:url 創建一個URL地址
<br><!-- 以下標籤會創建此url: /struts2-4/getProduct?productId=1001 -->
<s:url value="/getProduct" var="url" >
<s:param name="productId" value="2222"></s:param>
</s:url>
${url }
<br><br><!-- param的value會自動進行OGNL解析,如果不想解析,就用單引號引出 -->
<s:url value="/getProduct" var="url2" >
<s:param name="productId" value="#session.date"></s:param>
</s:url>
${url2 }
<br><br>
<s:url value="/getProduct" var="url3" >
<s:param name="productId" value="abcd"></s:param>
</s:url>
${url3 }
<br><br><!-- 用單引號再次包圍後,就不會去值棧中查找 /struts2-4/getProduct?productId=abcd -->
<s:url value="/getProduct" var="url4" >
<s:param name="productId" value="'abcd'"></s:param>
</s:url>
${url4 }
<br><br><!--構建一個請求Action的地址 /struts2-4/hcx/testAction!save.action -->
<s:url action="testAction" namespace="/hcx" var="url5" method="save"></s:url>
${url5 }
<br><br><!--includeParams的get參數:會在新url後帶上當前地址請求參數 :testUrl?name=hcx -->
<s:url value="testUrl" var="url6" includeParams="get"></s:url>
${url6 }
<br><br><!-- all會包涵到本頁的post參數,附加到url上 -->
<s:url value="testUrl" var="url7" includeParams="all"></s:url>
${url7 }
<br><br>
4.set標籤
可以用來在以下Map對象中創建一個鍵值對。
ValueStack值棧的ContextMap值棧、Map類型的session對象、Map類型的application對象、Map類型的Request對象、Map類型的page對象
<br><br>
<!-- 將key爲productNameTest value爲值棧中的poroductName的值放入request中,value會OGNL解析
實際打印出來的是productName的值:CPU -->
<s:set name="productNameTest" value="productName" scope="request"></s:set>
productname:${requestScope.productNameTest }
5.push標籤
先在request中放入一個對象,然後使用push壓入值棧,在push標籤內部,直接輸出值棧中的內容
<!-- 在標籤開始後壓入值棧,標籤結束時彈出值棧 -->
<%
Test test=new Test();
test.setProductName("hcx");test.setProductDesc("100");
request.setAttribute("ttt", test);
%>
<s:push value="#request.ttt">
push標籤測試productDsc:${productName }
</s:push>
6.if,else和elseif標籤
test中可以直接使用值棧中的屬性,例子中就通過判斷值棧中product對象的productPrice,來進行區分。
<br><br>
<s:if test="productPrice>1000">
IIIIII7
</s:if>
<s:elseif test="productPrice>800">
IIIII5
</s:elseif>
<s:else>
I3
</s:else>
7.iterator標籤
用於遍歷一個數組,Collection或Map,並把這個可遍歷對象的每一個元素依次壓入和彈出ValueStack棧。
<%
List<Test> tests = new ArrayList();
tests.add(new Test("AA", "10"));
tests.add(new Test("BB", "20"));
tests.add(new Test("CC", "30"));
tests.add(new Test("DD", "40"));
request.setAttribute("tests", tests);
%>
<s:iterator value="#request.tests" status="status">
<!-- status屬性可以打印 索引和個數-->
${status.index }--${productName }----${productDesc }
<br>
</s:iterator>
<br>
-----------------
<br>
<s:iterator value="tests">
${productName }----${productDesc }
<br>
</s:iterator>
8.sort標籤
現準備好實現Comparator接口的類,然後確定source,再引入域對象,內部進行iterator。
#attr :會從域對象中依次尋找對應的key的數據,搜尋範圍從 page>request>session>application
<br>排序<br>
<!-- var代表放到域對象裏的key的值 先確定比較的comparator,然後把list放入域對象,再s:iterator遍歷-->
<s:sort comparator="#request.ts" source="tests" var="newtests" >
<s:iterator value="#attr.newtests">
${productName }----${productDesc }
<br>
</s:iterator>
</s:sort>
9.date標籤
<br><br>
s:date 可以對Date對象進行排版
<br>
<s:date name="#session.date" format="yyyy-mm-dd" var="date2"/>
date:${date2 }
10.a標籤
<br><br>
<!-- a標籤可以生產url,在href裏用%{}進行強制OGNL解析 -->
<s:iterator value="#request.tests" >
<s:a href="testURl.action?name=%{productName}">${productName}--url</s:a>
</s:iterator>