基本概述css
對於一個MVC框架而言,重點是實現兩部分:業務邏輯控制器部分和視圖頁面部分。Struts2做爲一個優秀的MVC框架,也把重點放在了這兩部分上。控制器主要由Action來提供支持,而視圖則是由大量的標籤來提供支持。html
在JavaWeb中,Struts2標籤庫是一個比較完善,並且功能強大的標籤庫,它將全部標籤都統一到一個標籤庫中,從而簡化了標籤的使用,它還提供主題和模板的支持,極大地簡化了視圖頁面代碼的編寫,同時它還提供對ajax的支持,大大的豐富了視圖的表現效果。與JSTL(JSP Standard Library,JSP 標準標籤庫)相比,Struts2標籤庫更加易用和強大。java
PS:使用標籤,須要引入Struts2核心jar包,在jsp頭部,加入<%@ taglib uri="/struts-tags" prefix="s" %>ajax
Struts2的模板和主題算法
Struts2的UI標籤都是基於模板和主題的。所謂模板,就是一些代碼,Struts2標籤使用這些代碼渲染生成相應的HTML代碼。模板是一個UI標籤的外在表現形式,而且每一個標籤都會有本身對應的模板。若是爲全部的UI標籤提供樣式和視覺效果類似的模板, 那麼這一系列的模板就造成了一個主題。服務器
Struts2 默認提供了4 種主題,分別爲 simple、xhtml、css_xhtml和Ajax。框架
這4種內建主題中,xhtml爲默認主題,但xhtml有必定的侷限性。由於它使用表格進行佈局,而且只支持每一行放一個表單項,這樣一來,一旦遇到複雜的頁面佈局,xhtml就難以勝任了。此時,就須要改變Struts2的默認主題。jsp
一般,經過設置常量struts.ui.theme,來改變默認主題,具體作法是在struts.xml或者struts.properties文件中增長相應的配置。好比想要設置使用simple的主題,那麼須要在struts.xml中增長以下配置:佈局
<constant name="struts.ui.theme" value="simple"/>
或者在struts.properties文件中增長以下配置:ui
struts.ui.theme=simple
Struts2標籤庫的分類
控制標籤
if-elseif-else
<%--一、if elseif else的使用 --%> <% //存入請求域中一個學生的成績 request.setAttribute("score", 89); %> <!-- 判斷學生成績,輸出成績所對應的ABCD --> <s:if test="#request.score>90"> 優秀 </s:if> <s:elseif test="#request.score>80"> 良好 </s:elseif> <s:else> 通常 </s:else>
iterator
<s:iterator value="customers"> <%--s:iterator是struts2的一個迭代標籤,它的value屬性取值是一個OGNL表達式 var屬性:它的取值就是一個普通的字符串. 用了var:把每次遍歷的對象做爲value,把var的值做爲key,存入ContextMap中 沒用var:把每次遍歷的對象壓入棧頂,再下次遍歷以前彈棧(從棧頂移走)。 begin:開始遍歷的索引 end:遍歷的結束索引 step:遍歷的步長。 status:計數器對象 count 已經遍歷的集合元素個數 index 當前遍歷元素的索引值 odd 是否奇數行 even 是否偶數行 first 是否第一行 last 是否最後一行 --%> <TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none"> <TD><s:property value="custName"/></TD> <TD><s:property value="custLevel"/></TD> <TD><s:property value="custSource"/></TD> <TD><s:property value="custIndustry"/</TD> <TD><s:property value="custAddress"/></TD> <TD><s:property value="custPhone"/></TD> </TR> </s:iterator>
數據標籤
property
<%-- 輸出值棧中的值 --%> <s:property value="custName"/>
a
<%--使用struts2的超連接標籤發送請求: <s:a>鏈接內容</s:a> 屬性: href:指定url路徑 action:請求的動做名稱(類名) namespace:動做名稱所在的名稱空間 id:指定id method:指定Action調用方法 --%> <s:a action="addUIUser" namespace="/user">添加用戶</s:a> <s:a action="editUIUser" namespace="/user"> 編輯用戶 <s:param name="userid" value="%{'1'}"></s:param> </s:a> <a href="${pageContext.request.contextPath}/user/editUIUser.action?userid=1">原始超連接標籤-編輯用戶</a>
debug
debug標籤用於調試Struts2,使用它會在頁面中生成一個debug標籤,點擊後會顯示服務器各類對象信息,包括值棧、ContextMap等。
<s:debug/>
date
<%--s:date標籤的使用: 它是用於格式化輸出日期 name屬性:取值是一個ognl表達式,表示要格式化的日期對象 format屬性:指定格式 var屬性:取值是一個普通的字符串。 把格式化好的日期字符串做爲value,把var的取值做爲key。存入contextMap中 --%> <% request.setAttribute("myDate",new Date()); /* SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日"); String date = format.format(new Date()); out.println(date); */ %> ${requestScope.myDate}<br/> <s:property value="#request.myDate"/> <s:date name="#request.myDate" format="yyyy年MM月dd日" var="sdate"/> <br> 格式化後的日期:<s:property value="#sdate"/> <br/> ${sdate}
url
<%-- url標籤 做用:用於存放一個路徑 屬性: action:動做名稱 namespace:名稱空間 var:取值是一個普通字符串。他會把action和namespace組成一個url做爲value,把var的取值做爲一個key,存入contextMap中 --%> <s:url action="addUIUser" namespace="/user" var="myurl"/> <a href="<s:property value='#myurl'/>">添加用戶——url</a>
表單標籤
表單標籤的通用屬性
屬性名 |
主題 |
數據類型 |
說明 |
title |
simple |
String |
設置表單元素的title屬性 |
disabled |
simple |
String |
設置表單元素是否可用 |
label |
xhtml |
String |
設置表單元素的label屬性 |
labelPosition |
xhtml |
String |
設置label元素的顯示位置,可選值 : top 和 left(默認) |
name |
simple |
String |
設置表單元素的name屬性,與Action中的屬性名對應 |
value |
simple |
String |
設置表單元素的值 |
cssClass |
simple |
String |
設置表單元素的class |
cssStyle |
simple |
String |
設置表單元素的style屬性 |
required |
xhtml |
Boolean |
設置表單元素爲必填項 |
requiredpositon |
xhtml |
String |
設置必填標記(默認爲*)相對於label元素的位置,可選值:left 和right(默認) |
tabindex |
simple |
String |
設置表單元素的tabindex屬性 |
<form>標籤的經常使用屬性及描述
屬性名 |
是否必填 |
類型 |
說明 |
action |
否 |
String |
指定提交時對應的action,不須要action後綴 |
enctype |
否 |
String |
HTML表單enctype屬性 |
method |
否 |
String |
HTML表單method屬性 |
namespace |
否 |
String |
所提交action的命名空間 |
<s:submit>標籤的經常使用屬性
屬性名 |
是否必填 |
類型 |
說明 |
action |
否 |
String |
指定提交時對應的action |
method |
否 |
String |
指定action中調用的方法 |
<s:password>標籤的經常使用屬性說明
屬性名 |
說明 |
Name |
用於指定密碼輸入框的名稱 |
Size |
用於指定密碼輸入框的顯示寬度,以字符數爲單位 |
MaxLength |
用於限定密碼輸入框的最大輸入字符串個數 |
showPassword |
是否顯示初始值,即便顯示也仍爲密文顯示,用掩碼代替 |
<s:radio>標籤的屬性及說明
屬性名 |
是否必填 |
類型 |
說明 |
List |
是 |
Cellection、Map、Enmumeration、Iterator,array |
用於生成單選框中的集合 |
listKey |
否 |
String |
指定集合對象中的哪一個屬性做爲選項的value |
listValue |
否 |
String |
指定集合對象中的哪一個屬性做爲選項的內容 |
<s:checkboxlist>標籤的經常使用屬性及說明
屬性名 |
是否必填 |
類型 |
說明 |
name |
否 |
String |
指定該元素的name |
list |
是 |
Cellection、Map、Enmumeration、Iterator,array |
用於生成多選框的集合 |
listKey |
否 |
String |
生成checkbox的value屬性 |
listValue |
否 |
String |
生成checkbox後面顯示的文字 |
select標籤的經常使用屬性及說明
屬性名 |
是否必填 |
類型 |
說明 |
list |
是 |
Cellection、Map、Enmumeration、Iterator,array |
用於生成下拉框的集合 |
listKey |
否 |
String |
生成選項的value屬性 |
listValue |
否 |
Strmg |
生成選項的顯示文字 |
headerKey |
否 |
String |
在全部的選項前再加額外的一個選項做爲其標題的value值 |
headerValue |
否 |
String |
顯示在頁面中header選項的內容 |
Multiple |
否 |
Boolean |
指定是否多選,默認爲 false |
emptyOption |
否 |
Boolean |
是否在標題和真實的選項之間加一個空選項 |
size |
否 |
Int |
下拉框的高度,即最多能夠同時顯示多少個選項 |
案例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>註冊界面</title> </head> <body> <s:form action="register" namespace=""> <s:textfield name="username" label="用戶名" key="Switch"/> <s:password name="password" label="密碼"/> <s:radio name="gender" list="#{'0':'男','1':'女'}" label="性別" value="0" /> <s:textfield name="age" label="年齡"/> <s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'廣州','sz':'深圳'}" label="城市" headerKey="-1" headerValue="---請選擇城市---" emptyOption="true"/> <s:checkboxlist name="hibbies" list="#{'code':'寫代碼','algorithm':'算法','movie':'電影'}" label="愛好"/> <s:checkbox name="married" label="是否已婚" value="true" labelposition="left"/> <s:textarea name="description" label="自我介紹" rows="5" cols="20"/> <s:file name="phone" label="頭像"/> <s:submit value="提交"/> <s:reset value="重置"/> </s:form> </body> </html>