標籤:cPage style blog http java 使用
通用標籤和控制標籤第一部分;代碼
//前端<html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030" /><title>Insert title here</title></head><body>訪問屬性<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a></body></html>
//struct.xml<constant name="struts.ui.theme" value="simple" /><package name="tags" extends="struts-default"><action name="tags" class="com.struts2.tags.TagsAction"><result>/tags.jsp</result></action></package>
//類包package com.struts2.tags;import com.opensymphony.xwork2.ActionSupport;public class TagsAction extends ActionSupport {private String password;private String username;public TagsAction() {}public String execute() {this.addFieldError("fielderror.test", "wrong!");return SUCCESS;}public String getPassword() {return password;}public String getUsername() {return username;}public void setPassword(String password) {this.password = password;}public void setUsername(String username) {this.username = username;}}
//展示</head><body><ol><li>property: <s:property value="username"/> </li><li>property 取值為字串: <s:property value="'username'"/> </li><li>property 設定預設值: <s:property value="admin" default="管理員"/> </li><li>property 設定HTML: <s:property value="'<hr/>'" escape="false"/> </li><hr /><li>set 設定adminName值(預設為request 和 ActionContext): <s:set var="adminName" value="username" /></li><li>set 從request取值: <s:property value="#request.adminName" /></li><li>set 從ActionContext取值: <s:property value="#adminName" /></li><%--<li>set 定義範圍: <s:set name="adminPassword" value="password" scope="page"/></li><li>set 從相應範圍取值: <%=pageContext.getAttribute("adminPassword") %></li>--%><li>set 設定var,範圍為ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li><li>set 使用#取值: <s:property value="#adminPassword"/> </li><li>set 從相應範圍取值: <s:property value="#session.adminPassword"/> </li><hr /><%--<li>push:<s:set name="myDog" value="new com.bjsxt.struts2.ognl.Dog('oudy')"></s:set></li><li>push:<s:push value="#myDog"><s:property value="name"/></s:push></li><li>push: <s:property value="name"/></li>--%><hr /><li>bean 定義bean,並使用param來設定新的屬性值:<s:bean name="com.bjsxt.struts2.tags.Dog" ><s:param name="name" value="'pp'"></s:param><s:property value="name"/></s:bean></li><li>bean 查看debug情況:<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog"><s:param name="name" value="'oudy'"></s:param></s:bean>拿出值:<s:property value="#myDog.name"/></li><hr /><li>include _include1.html 包含靜態英文檔案<s:include value="/_include1.html"></s:include></li><li>include _include2.html 包含靜態中文檔案<s:include value="/_include2.html"></s:include></li><li>include _include1.html 包含靜態英文檔案,說明%用法<s:set var="incPage" value="%{'/_include1.html'}" /><s:include value="%{#incPage}"></s:include></li><hr /><li>if elseif else: age = <s:property value="#parameters.age[0]" /> <br /><s:set var="age" value="#parameters.age[0]" /><s:if test="#age < 0">wrong age!</s:if><s:elseif test="#parameters.age[0] < 20">too young!</s:elseif><s:else>yeah!</s:else><br /><s:if test="#parameters.aaa == null">null</s:if></li><hr /><li>遍曆集合:<br /><s:iterator value="{1, 2, 3}" ><s:property/> |</s:iterator></li><li>自訂變數:<br /><s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x"><s:property value="#x.toUpperCase()"/> |</s:iterator></li><li>使用status:<br /><s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status"><s:property/> | 遍曆過的元素總數:<s:property value="#status.count"/> |遍曆過的元素索引:<s:property value="#status.index"/> |當前是偶數?:<s:property value="#status.even"/> |當前是奇數?:<s:property value="#status.odd"/> |是第一個元素嗎?:<s:property value="#status.first"/> |是最後一個元素嗎?:<s:property value="#status.last"/><br /></s:iterator></li><li><s:iterator value="#{1:'a', 2:'b', 3:'c'}" ><s:property value="key"/> | <s:property value="value"/> <br /></s:iterator></li><li><s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x"><s:property value="#x.key"/> | <s:property value="#x.value"/> <br /></s:iterator></li><li><s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror></li></ol></body></html>
第二部分:分析前端:<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>點擊之後,傳遞了給
tag.action兩個參數username和password。
-> struct.xml配置,調用TagsAction.java類,初始化對象,並對對象設定初值。
<package name="tags" extends="struts-default"><action name="tags" class="com.struts2.tags.TagsAction"><result>/tags.jsp</result></action></package>
-> 根據struct.xml配置的結果資訊,將結果傳遞到<result>/tags.jsp</result>中說明的tag.jsp中進行顯示,並通過標籤進
行取值操作;
第三部分:通用標籤操作
property標籤:<li>property: <s:property value="username"/> </li><li>property 取值為字串: <s:property value="'username'"/> </li><li>property 設定預設值: <s:property value="admin" default="管理員"/> </li><li>property 設定HTML: <s:property value="'<hr/>'" escape="false"/> </li>
分析:
property 取值為字串: <s:property value="‘username‘"/>,當標籤中的s:proerty中的值為雙引號裡面加上單引號時,表
示將單引號裡面的值當做字串進行處理。
set標籤:<li>set 設定adminName值(預設為request 和 ActionContext): <s:set var="adminName" value="username" /></li><li>set 從request取值: <s:property value="#request.adminName" /></li><li>set 從ActionContext取值: <s:property value="#adminName" /></li><s:debug></s:debug><li>set 設定var,範圍為ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li><li>set 使用#取值: <s:property value="#adminPassword"/> </li><li>set 從相應範圍取值: <s:property value="#session.adminPassword"/> </li>
分析:
在set裡面可以設定作用範圍值:scope
scope 預設為action,可以取得的scope有五個:The scope in which to assign the variable. Can be application,
session, request, page, or action.
bean標籤:<li>bean 定義bean,並使用param來設定新的屬性值:<s:bean name="com.struts2.tags.Dog" ><s:param name="name" value="'pp'"></s:param><s:property value="name"/></s:bean></li><li>bean 查看debug情況:<s:bean name="com.struts2.tags.Dog" var="myDog"><s:param name="name" value="'oudy'"></s:param></s:bean>拿出值:<s:property value="#myDog.name"/></li>
分析:
bean標籤
參數name的類型為String,作用是The class name of the bean to be instantiated (must respect JavaBean
specification),定義一個需要執行個體化的類。
取值的方法:都是以#開頭,傢伙是哪個變數名稱
#adminPassword
#session.adminPassword
#myDog.name
注意一下兩種不同:
<s:bean name="com.struts2.tags.Dog" >
s:bean執行開始時,會構造一個對象入棧到棧頂,執行完畢之後從棧頂取出。
<s:bean name="com.struts2.tags.Dog" var="myDog">
執行之後放在Stack Context
include標籤<s:set var="incPage" value="%{'/_include1.html'}" /><s:include value="%{#incPage}"></s:include>
%{}作用:將其強制轉為ognl運算式;
第四部分:控制標籤操作
<hr /><li>if elseif else: age = <s:property value="#parameters.age[0]" /> <br /><s:set var="age" value="#parameters.age[0]" /><s:if test="#age < 0">wrong age!</s:if><s:elseif test="#parameters.age[0] < 20">too young!</s:elseif><s:else>yeah!</s:else><br /><s:if test="#parameters.aaa == null">null</s:if></li><hr />
通過set設定簡短名稱;
第五部分:遍曆標籤
<li>遍曆集合:<br /><s:iterator value="{1, 2, 3}" ><s:property/> |</s:iterator></li><li>自訂變數:<br /><s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x"><s:property value="#x.toUpperCase()"/> |</s:iterator></li>
分析:字串集合,var = "x"相當於for迴圈裡面定義的臨時變數,集合中的每個值取出來,每迴圈一次把值放到x裡面。利用#進行訪問就可以。
<li>使用status:<br /><s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status"><s:property/> | 遍曆過的元素總數:<s:property value="#status.count"/> |遍曆過的元素索引:<s:property value="#status.index"/> |當前是偶數?:<s:property value="#status.even"/> |當前是奇數?:<s:property value="#status.odd"/> |是第一個元素嗎?:<s:property value="#status.first"/> |是最後一個元素嗎?:<s:property value="#status.last"/><br /></s:iterator></li>
分析:status作用If specified, an instanceof IteratorStatus will be pushed into stack upon each iteration
s:property取出迴圈的當前值。通過對status取值,來得到迴圈情況
<li><s:iterator value="#{1:'a', 2:'b', 3:'c'}" ><s:property value="key"/> | <s:property value="value"/> <br /></s:iterator></li><li><s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x"><s:property value="#x.key"/> | <s:property value="#x.value"/> <br /></s:iterator></li>
分析:定義map時,需要在前面加上#;