Struts2標籤庫經常使用標籤

Struts2標籤庫經常使用標籤
基本概述
     對於一個MVC框架而言,重點是實現兩部分:業務邏輯控制器部分和視圖頁面部分。Struts2做爲一個優秀的MVC框架,也把重點放在了這兩部分上。控制器主要由Action來提供支持,而視圖則是由大量的標籤來提供支持。
     在JavaWeb中,Struts2標籤庫是一個比較完善,並且功能強大的標籤庫,它將全部標籤都統一到一個標籤庫中,從而簡化了標籤的使用,它還提供主題和模板的支持,極大地簡化了視圖頁面代碼的編寫,同時它還提供對ajax的支持,大大的豐富了視圖的表現效果。與JSTL(JSP Standard Library,JSP 標準標籤庫)相比,Struts2標籤庫更加易用和強大。

PS:使用標籤,須要引入Struts2核心jar包,在jsp頭部,加入<%@ taglib uri="/struts-tags" prefix="s" %>
 
Struts2的模板和主題
     Struts2的UI標籤都是基於模板和主題的。所謂模板,就是一些代碼,Struts2標籤使用這些代碼渲染生成相應的HTML代碼。模板是一個UI標籤的外在表現形式,而且每一個標籤都會有本身對應的模板。若是爲全部的UI標籤提供樣式和視覺效果類似的模板, 那麼這一系列的模板就造成了一個主題。
     Struts2 默認提供了4 種主題,分別爲 simple、xhtml、css_xhtml和Ajax。
  • simple主題:這是最簡單的主題,使用該主題時,每一個UI標籤只生成最基本的HTML元素,沒有任何附加功能。
  • xhtml主題:這是Struts2的默認主題,它對simple主題進行了擴展,提供了佈局功能、Label顯示名稱、以及與驗證框架和 國際化框架的集成。
  • css_xhtml:該主題是xhtml的擴展,在對xhtml的基礎之上添加對CSS的支持和控制。
  • Ajax:繼承自對xhtml,提供 Ajax支持。

這4種內建主題中,xhtml爲默認主題,但xhtml有必定的侷限性。由於它使用表格進行佈局,而且只支持每一行放一個表單項,這樣一來,一旦遇到複雜的頁面佈局,xhtml就難以勝任了。此時,就須要改變Struts2的默認主題。
     一般,經過設置常量struts.ui.theme,來改變默認主題,具體作法是在struts.xml或者struts.properties文件中增長相應的配置。好比想要設置使用simple的主題,那麼須要在struts.xml中增長以下配置:
<constant name="struts.ui.theme" value="simple"/>

或者在struts.properties文件中增長以下配置:
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
  • id:可選屬性,指定該元素的標識。
  • default:可選屬性,若是要輸出的屬性值爲null,則顯示default屬性的指定值。
  • escape:可選屬性,指定是否忽略HTML代碼。
  • value:可選屬性,指定須要輸出的屬性值,若是沒有指定該屬性,則默認輸出ValueStack棧頂的值
<%-- 輸出值棧中的值 --%>
<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>