一 數據標籤
1. property標籤
property標籤用來顯示屬性的值
所包含的屬性:
屬性 | 是否必須 | 默認值 | 類型 | 描述 |
value | 否 | ValueStack最頂端的值 | Object | 被顯示的值 |
default | 否 | null | String | value值爲空時顯示的值 |
escape | 否 | ture | Boolean | 是否轉義HTML |
使用示例:
<s:property value="user.username" />
如果不指明value,即:<s:property /> 則值默認值爲VlueStack棧頂的值。
這裏如果加上default屬性:
<s:property value="user.username" default="用戶名" />
則當user.username的值爲空時,將顯示"用戶名"這三個字。
2. set標籤
set標籤用於給一個屬性取別名
屬性 | 是否必須 | 類型 | 描述 |
name | 是 | String | 被設置在指定作用域的變量的引用名 |
scope | 否 | String | application、session、request、page或者action,默認值爲action |
value | 否 | Object | 設置值得表達式,即name引用名的值 |
使用示例
<s:set name="username" value="user.username" />
<s:property value="#username" />
這裏我們將user.username 的值賦給了新建的引用變量username,之後我們就可以直接使用這個變量來獲得user.username的值了
3. push標籤
與set標籤不同的是,push標籤把值放入ValueStack中,以便我們對屬性的訪問。
屬性 | 是否必須 | 類型 | 描述 |
value | 是 | Object | 放到ValueStack中的值 |
使用示例:
假設我們有一個User.java類:
public class User{
private String name;
private String password;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
}
Action類:
public class TestAction extends ActionSupport{
private User user;
public String execute (){
return "success";
}
public void setUser(User user){
this.user = user;
}
public User getUser(){
return user;
}
}
在jsp頁面中我們可以這樣調用User的屬性:
<s:property value="user.name" />
<s:property value="user.password" />
但是當User中的屬性很多時,我們會發現每次都得使用user.的方式來調用,我們會覺得很煩,
這裏push標籤就發揮作用了:
<s:push value="user">
<s:peoperty value="name" />
<s:property value="password" />
</s:push>
這樣使用的效果與上面的方式是一致的。
這裏需要注意的是,user對象是已經存在ValueStack中的了。
4. bean標籤
bean標籤像是set標籤和push標籤的混合。主要不同的是bean標籤不需要使用一個已經存在的對象。你可以創建一個對象的實例把它放到ValueStack中或者設置爲ActionContext的頂級引用。默認情況下,對象會被放在ValueStack中。如果想在標籤的作用域之外引用創建的對象,可以使用var屬性爲對象創建一個引用名,那麼這個引用名會作爲命名參數存在於ActionContext中,在請求週期內可以使用#操作符訪問這個對象。
屬性 | 是否必須 | 類型 | 描述 |
name | 是 | String | 被創建bean的包名和類名 |
var | 否 | String | 在結束標籤作用域之外引用這個bean時使用的變量名 |
使用示例:
假設User.java在com.user包中,內容與上面的一致,
則在jsp頁面我們可以這樣使用:
<s:bean name="com.user.User" var="user">
<s:param name="name">張三</s:param>
<s:param name="password">123456</s:param>
</s:bean>
<s:property value="#user.id"/>
<s:property value="#user.password"/>
這裏需要注意的是,user對象是放在ActionContext中的,所以我們需要使用#來訪問它。
5. action標籤
該標籤允許我們從當前的視圖調用其他的動作。
屬性 | 是否必須 | 類型 | 描述 |
name | 是 | String | 動作名 |
namespace | 否 | String | 動作的命名空間,默認使用當前頁面的命名空間 |
var | 否 | String | 在後續代碼中使用的動作對象的引用名 |
executeResult | 否 | Boolean | 設爲true時將動作的結果顯示在當前頁面,默認爲false |
flush | 否 | Boolean | 設爲true時在action標籤的結尾會刷新寫出緩衝區,默認值爲true |
ignoreContextParams | 否 | Boolean | 設置爲true時不包含請求參數,默認爲false |
使用示例:
index.jsp:
<s:action name="target" namespace="/tagsTest" executeResult="true" />
在struts.xml中有如下配置:
<package name="default" namespace="/tagsTest" extends="struts-default">
<action name="target" class="com.action.TestAction">
<result name="success">/success.jsp</result>
</action>
</package>
上面使用的結果會將success.jsp的頁面在index.jsp中顯示。
二 控制標籤
1. iterator 標籤
iterator標籤可以遍歷Collection、Map、Enumeration、Iterator或者數組。
屬性 | 是否必須 | 類型 | 描述 |
value | 是 | String | 被遍歷的對象 |
status | 否 | String | 如果指定,IteratorStatus對象會使用這個屬性指定的名字,且該名字被放在ActionContext中 |
使用示例:
<s:iterator value="users" status="s">
<s:property value="#s.count" />
<s:property value="name" />
<s:property value="password" />
</s:iterator>
其中users爲要遍歷的數字或其他的什麼集合,集合類型爲User,定義與上面定義的User.java一致。
這裏status屬性定義的s放在ActionContext中,所以訪問的時候需要加上#.
額外說明:
如果定義了status屬性,那麼會在ActionContext中提供一個IteratorStatus對象,這個對象可以提供諸如集合大小、
當前索引等信息。可以通過status屬性指定的名字來訪問IteratorStatus對象。下面爲IteratorStatus對象可以獲得的信息:
方法名 | 返回值 |
getCount | int |
getIndex | int |
isEvent | Boolean |
isFirst | Boolean |
isLast | Boolean |
idOdd | Boolean |
modulus(int operand) | int |
上面的示例中我們使用#s.count來獲得了當前遍歷的是集合中的第幾個。
2. if和else標籤
屬性 | 是否必須 | 類型 | 描述 |
test | 是 | Boolean | 被求值和測試的布爾表達式 |
使用示例:
<s:if test="user.age > 35">The user is too old.</s:if>
<s:elseif test="user.age < 18">The user is too young</s:elseif>
<s:else>This user is just right</else>
三 其他標籤
1. include標籤
include標籤與前面講的action標籤不同的是:
include標籤可以引用任何的Servlet資源,而action標籤只能包含當前Struts 2應用程序中的Struts 2動作。這個包含的動作必須完全在Struts2框架中。include標籤可以跳出Struts 2框架引用任何部署Struts 2應用程序的Web應用程序可以訪問的資源。
屬性 | 是否必須 | 類型 | 描述 |
value | 是 | String | 頁面、動作、Servlet以及其他可以被引用的URL的名字 |
使用示例:
<s:include value="success.jsp" />
2. URL標籤
屬性 | 是否必須 | 類型 | 描述 |
value | 否 | String | 該URL的值 |
action | 否 | String | 生成URL指向的動作名,是用聲明性框架中配置的動作名(不需要.action擴展名) |
var | 否 | String | 如果指定,這個URL不會被寫出,而會存儲在ActionContext留後面使用 |
includeParams | 否 | String | 從all、get、none中選擇參數,默認值爲get |
includeContent | 否 | Boolean | 如果爲true,那麼生成的URL會使用應用程序的Context作爲前綴,默認值爲true |
encode | 否 | Boolean | 如果用戶瀏覽器不支持Cookie,會將Session ID追加在生成的URL中 |
scheme | 否 | String | 指定協議,默認使用當前的協議(HTTP或者HTTPS) |
使用示例1:
<s:url value="/helloworld/hello.action" />
<a href='<s:url value="/helloworld/hello.action" />'>Click Me</a>
以上會輸出:
/HelloWorld/helloworld/hello.action
Click Me
注:HelloWorld爲項目的名稱
Click Me 是超鏈接,連接到該url指定的路徑
使用示例2:
<a:url action="hello" namespace="helloworld" var="myUrl" />
<a:href='<s:property value="#myUrl" />'>Click Me</a>
輸出:
Click Me
注:Click Me 爲超鏈接,點擊該超鏈接與上面的結果一致。
參考資料:Struts 2 In Action