1. propertycss
2. sethtml
i. 默認爲action scope,會將值放入request和ActionContext中ajax
ii. page、request、session、application數組
3. beansession
4. include (對中文文件支持有問題,不建議使用,如需包含,改用jsp包含)app
5. param框架
6. debugjsp
1. if elseif elseide
2. iterator測試
i. collections map enumeration iterator array
3. subset
1. theme
i. simple xhtml(默認) css_xhtml ajax
基本不用,直接用Ajax框架
1. $用於i18n和struts配置文件
2. #取得ActionContext的值
3. %將本來的文本屬性解析爲ognl,對於原本就是ognl的屬性不起做用
i. 參考<s:property 和 <s:include>
說明一點,每個標籤的屬性,有的是字符串,有的是Ognl表達式
好比標籤property:
若是這個屬性是Object類型,就會把屬性value裏的字符串解析成Ognl表達式
property
實例:
<action name="tags" class="com.bjsxt.struts2.tags.TagsAction"> <result>/tags.jsp</result> </action>
TagsAction:
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; } }
tags.jsp
<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>
set
何時會用到set標籤
只是作jsp開發的時候不多能用到,可是有時候能夠爲一個特別長或者特別難寫的變量設置別名等,可能會用到
可見id和name都不用設置了,只須要var就行
默認範圍:
<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> 範圍爲page: <s:set name="adminPassword" value="password" scope="page"/></li> <li> 從相應範圍取值: <%=pageContext.getAttribute("adminPassword") %> --%> <li> 範圍爲session: <s:set var="adminPassword" value="password" scope="session"/></li> <li> 從相應範圍取值: <s:property value="#session.adminPassword"/> </li>
bean
bean的做用就是生成一個類的對象
<li>bean 定義bean,並使用param來設定新的屬性值: <s:bean name="com.bjsxt.struts2.tags.Dog" > <s:param name="name" value="'pp'"></s:param> //這個name的屬性值,就是Dog類的成員,表示爲哪個成員賦值 <s:property value="name"/> </s:bean> </li>
Dog:
package com.bjsxt.struts2.tags; public class Dog { private String name; public Dog() { } public Dog(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "dog: " + name; } }
當使用bean的時候,就會生出一個對象,而且壓到棧頂,在bean標籤的內部能夠使用這個對象,可是一旦bean標籤結束,這個對象就會從棧頂拋出,因此在bean標籤外部是訪問不到的。(能夠用debug標籤作測試,在內部能夠看到在外部看不到)
可是若是在外部想訪問怎麼辦?
這時候就要使用val屬性,把這個對象放在valueContext裏面
<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>
Include
儘可能少用這個標籤,處理中文特別麻煩。
Jsp裏面有兩個包含文件的方式,<% <? ,用這兩種就好,不要用這個標籤
<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>
include的value值就是一個普通字符串,而不是ognl表達式
在第3個例子中,若是想把incPage從字符串變成ognl表達式
使用%{}
if
<li>if else: age = <s:property value="#parameters.age[0]" /> <br />
<s:if test="#parameters.age[0] < 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>
注意,每個參數都有多是數組,無論傳過來幾個值,若是想取第一個值,都要加[0]
valueContext裏的parameters指的是點擊連接帶過來的參數
<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>
每次都寫#parameters.age[0]太麻煩,這時候就看出來set標籤的好處了
<s:set var="age" value="#parameters.age[0]" /> <s:if test="#age < 0">wrong age!</s:if>
iterator
就是遍歷,理論上能夠遍歷如下幾種集合
collections map enumeration iterator array
ognl表達式裏面大括號就是一個集合,默認會轉化成list
<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>
結果是
Map:
<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>
UI
UI標籤用的並很少
主要說一個 theme(主題)
有四種形式
simple xhtml(默認) css_xhtml ajax
主題就像頁面皮膚
當咱們在視圖上寫html源碼時,在客戶端展示出來的是通過處理的,並非原封不動的源碼,不一樣的theme能夠解析成不一樣的結果
主題有點像抽象工廠,當咱們選擇一種時就換一種皮膚
咱們能夠配置本身的主題,也能夠在配置文件中換成其餘主題