使用Struts2标签
Struts2提供了大量標簽幫助開發(fā)表現(xiàn)層頁面,Struts2標簽庫與Struts1相比,不依賴于任何表現(xiàn)層技術(shù),大部分可以在各種表現(xiàn)層技術(shù)中使用,包括最常用的jsp頁面,也可以在Velocity和FreeMarker等模板技術(shù)中使用。
注:極小部分在某些表現(xiàn)層中受到限制
還記得如何開發(fā)自定義標簽以及使用嗎?
JSP2自定義標簽
使用Struts2標簽
Struts2標簽庫分為UI標簽和非UI標簽,UI標簽庫又分為表單標簽庫和非表單標簽,非UI標簽又分為控制標簽和數(shù)據(jù)訪問標簽
Struts2框架已經(jīng)完成了開發(fā)自定義標簽的步驟,即提供了標簽處理類,也提供了標簽庫定義文件。
使用WinRAR解壓struts2-core-2.5.20.jar文件,\struts2-core-2.5.20\META-INF找到struts-tags.tld,這就是Struts2的標簽庫定義文件
Struts2的OGNL表達式語言
Struts內(nèi)建的表達式語言,大大增強了Struts的數(shù)據(jù)訪問功能,XWork在原有的OGNL的基礎上,增加了對ValueStack的支持。
OGNL并不是真正的編程語言,而是一門數(shù)據(jù)訪問語言
傳統(tǒng)的OGNL表達式求值中,系統(tǒng)會假設只有一個根對象
如果系統(tǒng)的Stack Context中包含兩個對象:foo對象、bar對象,并將foo設置稱根對象。
如下所例:
Struts2可以直接從對象中獲取屬性,Struts2提供了一個特殊的OGNL PropertyAccessor(屬性訪問器),它可以自動搜尋Stack Context的所有的實例。
例如:Stack Context中包含了兩個根實例
1、animal:擁有屬性name,species
2、person:擁有屬性name,salary
棧中分布:animal實例在person實例的上面
如果要取得person的name
#person.name還可以通過索引訪問Stack Context中的對象
[0].name //返回animal.getName()方法 [1].name //返回person.getName()方法Struts2內(nèi)置了一些命名對象
parameters:用于訪問HTTP請求參數(shù)。#parameters.foo,用于返回HttpServletRequest的getParameter(“foo”)方法返回值
request:用于訪問HttpServletRequest的屬性
session:用于訪問Session的屬性
application:用于訪問ServletContext的屬性
attr:該對象將依次搜索如下對象:PageContext、HttpServletRequest、HttpSession、ServletContext中的屬性
注:當系統(tǒng)創(chuàng)建Action實例后,該Action實例已經(jīng)保存在ValueStack中,無需寫#即可訪問Action屬性
擴充:
對于Stack Context 和ValueStack概念的認識
Stack Context:是整個OGNL計算求值的Context,Stack Context對象就是一個Map類型的實例,它有一個根對象ValueStack(一般保存action實例),除此之外,還包含以上內(nèi)置的命名對象。
- 訪問Stack Context里的命名對象需要在對象名前加#
- 訪問Stack Context根對象里的屬性,可以省略對象名
可以將Stack Context中的對象放入ValueStack棧頂
OGNL集合操作
1、直接創(chuàng)建List類型的集合
{e1,e2,e3····}
2、直接生成Map類型的集合
#{key1:value1,key2:value2····}
對于集合,提供了兩個運算符
1、in:判斷某個元素是否在指定集合中
2、not in:判斷某個元素是否不在指定集合中
通過某個規(guī)則可以取得集合的子集
1、?:取出所有符合選擇邏輯的元素
2、^:取出符合選擇邏輯的最后一個元素
3、$:取出符合選擇邏輯的第一個元素
訪問靜態(tài)成員
Struts默認關(guān)閉了訪問靜態(tài)方法,只能通過OGNL表達式訪問靜態(tài)域,,為了讓OGNL表達式訪問靜態(tài)域,需要在Struts.xml中設置如下代碼片段
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>OGNL表達式可以通過以下語法訪問靜態(tài)成員
@className@staticField @className@siaticMethod(val····)例如如下jsp片段
<!--生成一個偽隨機數(shù)--> <s:property value="@java.lang.Math@random()"/> <!--圓周率的值--> <s:property value="@java.lang.Math@PI"/>支持Lambda表達式(java8新特性,好好學學)
將函數(shù)作為方法的參數(shù)
假設有如下斐波那契數(shù)列:
用OGNL表達式輸出第10個數(shù)
<s:property value="#fun=:[#this==0?0:#this==1?1:#fun(#this-2)+#fun(#this-1)],#fun(10)">非UI標簽
控制標簽
主要用于流程控制,如分支、循環(huán)等,也可完成對集合的合并,排序等操作以及操作Struts2的valueStack
控制標簽 如以下9個:
1、if
2、elseif
3、else
<s:if···>可以直接單獨用,其他兩個必須跟著<s:if···>一起用
test屬性進行條件判斷的邏輯表達式
比如:
4、iterator標簽
主要對集合進行迭代輸出
有以下三個屬性:
1、value:用于指定被迭代的集合,沒有指定該屬性,則使用ValueStack棧頂?shù)募稀?br /> 2、var:指定了集合元素的ID
3、status:指定迭代時IteratorStatus實例,通過該實例可以判斷當前元素的屬性,比如當前迭代元素的索引
IteratorStatus實例包含了以下幾個方法:
1、int getCount():返回當前迭代了幾個元素
2、int getIndex():返回當前迭代元素的索引
3、boolean isEven():判斷當前被迭代的元素索引是否為偶數(shù)
4、boolean isOdd():判斷當前被迭代的元素索引是否為奇數(shù)
5、boolean isFirst()
6、boolean isLast()
5、append標簽
將多個集合對象連接起來
var:拼接生成新集合的名字
可以接收<s:param···/>子標簽,每一子標簽代表一個集合
注:<s:append···> 可以將Map集合和List集合連接在一起
6、generator標簽
可以將指定字符串按指定分隔符分成多個子串,臨時生成的多個字串可以用Iterator標簽迭代輸出
有這樣的一種說法:運用此標簽首先將整個字符串轉(zhuǎn)化成yi
個集合,整個生成的集合將位于ValueStack棧頂,標簽使用結(jié)束,該集合將被移出ValueStack
generator標簽有以下幾個屬性
count;指定集合中元素的個數(shù)
separator:指定解析字符串的分隔符
val:指定被解析的字符串
converter:指定一個轉(zhuǎn)換器,負責將集合中的每一個字符串轉(zhuǎn)換為對象
var:指定該屬性,生成的集合對象會放在Stack Context中以及requestScope
7、merge標簽
將多個集合拼接成一個集合,與append標簽的區(qū)別在于:
假設有三個集合,每個集合中有兩個元素
append標簽新集合的順序:
第一集合第一元素
第一集合第二元素
第二集合第一元素
第二集合第二元素
第三集合第一元素
第三集合第二元素
merge標簽新集合的順序:
第一集合第一元素
第二集合第一元素
第三集合第一元素
第一集合第二元素
第二集合第二元素
第三集合第二元素
8、subset標簽
用于取得集合的子集
可指定以下幾個屬性
count:指定子集中元素的個數(shù),不指定此屬性則默認源集合全部元素
source:指定源集合
start:指定子集從原集合第幾個元素開始截取,默認值0
var:與 generator一樣,會生成臨時集合對象放入ValueStack中,標簽執(zhí)行結(jié)束,則一處ValueStack。如果指定了該屬性, 生成該集合的Iterator對象設置成page范圍內(nèi)的屬性值,屬性名即var=“屬性名”
decider:是否選定該元素 ,指定一個Decider對象
Struts2允許開發(fā)者決定截取標準,需要實現(xiàn)一個Decider類,該類又要實現(xiàn)SubIteratorFilter.Decider接口,重寫boolean decide(Object ele)方法
jsp頁面中使用
<!--使用自定義的Decider實例截取目標集合--> <!--使用var屬性,將生成的Iterator對象放入pageScope--> <s:subset source="{"245s","51c5d","dcse","cde1dcsd","ecw"}" decider="#myDecider" var="newList"/> ${pageScope.newList} <table border="1" width="100"> <s:iterator status="st" value="#attr.newList"> <tr <s:if test="#st.odd">style="background-color:"#bbbbbb"</s:if>> <td><s:property/></td> </tr> </table>9、sort標簽
對指定集合元素進行排序,必須提供自己的排序規(guī)則,即自定義java類實現(xiàn)java.util.Comparator接口
sort標簽可指定以下屬性:
comparator:該屬性指定排序的Comparator實例
source:指定被排序的集合,不指定該屬性,則選取ValueStack棧頂集合
var:指定該屬性,則將生成集合的Iterator對象設置成page范圍內(nèi)的屬性
排序后的新集合放入pageScope范圍內(nèi)
事例:
src/myComparator.java
jsp
<s:sort source="{"deffc","deswff","dewfweff","dwfqefrewgfwe"}" var="sortedList" comparator="#myComparator"/> ${pageScope.sortedList} <table border="1" width="100"> <s:iterator status="st" value="#attr.sortedList"> <tr <s:if test="#st.odd">style="background-color:"#bbbbbb"</s:if>> <td><s:property/></td> </tr> </table>數(shù)據(jù)標簽
提供各種數(shù)據(jù)訪問相關(guān)的功能
主要標簽如下幾個:
1、action標簽
允許在jsp界面中直接調(diào)用Action
有以下幾個屬性
1、var:如果設置了該屬性,該Action將被放入Stack Context中
2、name:指定調(diào)用哪個Action
3、namespace:指定調(diào)用的Action所在的namespace
4、executeResult:是否將Action處理結(jié)果頁面保存到本頁面
5、ignoreContextParams:該頁面的請求參數(shù)是否傳入調(diào)用的Action中
/src/tagAction.java
public class tagAction extends ActonSupport { String user; String pass; //省略getter和setter方法 ····· public String execute()throws IOException,JspException { return "done"; } public String login()throws Exception { ActionContext.getContext().put("user",getuser()); return "done";ccc } }在Struts.xml文件中將Action類映射成兩個邏輯action
<action name="tag2" class="tagAction"> <result name="done">/WEB-INF/content/succ.jsp</result> </action> <action name="tag1" class="tagAction" method="login"> <result name="done">/WEB-INF/content/success.jsp</result> </action>jsp頁面中使用<s:action>標簽調(diào)用兩個Action代碼邏輯片段
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="ss" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <ss:action name="tag1" executeResult="true"/><hr/> <ss:action name="tag1" executeResult="false"/>不包含結(jié)果 <ss:property value="user"/><hr/> <ss:action name="tag1" executeResult="true" ignoreContextParams="true"/><hr/> </body> </html>
2、bean標簽
用于創(chuàng)建一個javaBean實例,可以在該標簽體內(nèi)使用<param…/>為javaBean實例傳入屬性,javaBean類應提供對應的setter方法,如果訪問javaBean某個屬性,還應該提供getter方法
此標簽有以下屬性
1、name:指定要實例化javaBean的實現(xiàn)類
2、var:如果指定了該屬性,則將javabean實例放入Stack Context 中,并放入requestScope中
在使用bean標簽時,會創(chuàng)建一個javabean對象,并臨時放入ValueStack頂端,該標簽執(zhí)行結(jié)束,則將其從ValueStack中移出
一個簡單的例子
/src/webapp/Person.java
JSP頁面
<!--未指定var屬性,只能在標簽內(nèi)部訪問javabean實例--> <s:bean name="webapp.Person"> <s:param name="name" value="binfeng"/> <s:param name="age" value="21"/> </s:bean>3、date標簽
用于格式化輸出一個日期,還可以計算指定日期和當前時刻的時間差
可以有如下幾個屬性:
1、format:如果指定了該屬性,則使用指定格式輸出時間
2、nice:是否輸出指定日期和當前日期的時間差,默認false,與format一般不同時使用,如果兩者都指定,忽略format,如果兩者都沒有的話,系統(tǒng)會取國際化資源尋找key為struts.date.format,如果無法找到,則默認采用DateFormat.MEDIUM格式輸出
3、name:指定格式化的日期值
4、var:如果指定了該屬性,格式化的字符串將放入Stack Context中,并放入requestScope范圍內(nèi)
4、debug標簽
用于輔助調(diào)試,會在頁面上生成一個超級鏈接,通過該鏈接可以查到Stack Context和ValueStack中所有值信息
5、include標簽
用于將一個jsp頁面或者servlet包含到本頁面中
value:指定被包含的jsp頁面或者servlet
6、param標簽
為其他標簽提供參數(shù)
name:參數(shù)名
value:參數(shù)值
7、push
將某個值放入ValueStack棧頂
value:指定放入棧頂?shù)闹?br /> 8、set標簽
用于將某個值放入指定范圍,
可以理解為設置新的變量,將已有的值(對象)賦給新的變量,并將新的變量放入指定的范圍內(nèi)
擁有以下屬性:
scope:指定新值防放置的范圍,該屬性可以接受application、session、request、page或action,默認值是action,action范圍指的是存入request范圍,并被放入OGNL的StackContext中
value:賦給變量的值,如果沒有指定此屬性,則取ValueStack棧頂?shù)闹?br /> var:指定了該屬性,則將該值放入到ValueStack中
9、url標簽
生成一個url地址,可以指定子標簽<s:param···>,向指定url發(fā)送請求參數(shù)
可以指定以下屬性
1、action:指定生成的url地址為哪個action,如果沒有指定值,則使用value的地址值
2、anchor:指定url的錨點
3、encode:指定是否對參數(shù)進行編碼,默認true
4、escapeAmp:是否需要對&符號進行編碼,默認true
5、forceAddSchemeHostAndPort:是否需要在url對應的地址里強制添加scheme、主機和端口
6、includeContext:是否將當前上下文包含到url中
7、includeParams:是否包含請求參數(shù),屬性值取none、get、all
8、method:指定Action的方法
9、namespace:指定命名空間
10、portletMode:指定結(jié)果頁面的portlet模式
11、scheme:設置scheme屬性
12、value:生成url地址值,和action都沒指定,則以當前頁面作為url地址值
13、var:指定該屬性,將會把鏈接值放入ValueStack中
14、windowState:指定結(jié)果頁面的portlet窗口狀態(tài)
10、property標簽
輸出指定值
value:指定輸出屬性值,沒有指定,則輸出ValueStack棧頂?shù)闹?br /> default:如果需要輸出的屬性值為null,則顯示default屬性給的值
escape:指定是否escape HTML代碼,默認為true
UI標簽
主題和模板
Struts中的UI標簽都是基于主題和模板的,
模板:是一個UI標簽外在表現(xiàn)形式
主題:所有的UI標簽都提供了對應的模板,這一系列模板就會形成一個主題
設置主題的方法有以下幾種:
1、設定特定UI標簽上的theme屬性來指定主題
2、通過UI標簽外圍的<s:form…/>的theme屬性指定主題
3、獲取page會話范圍內(nèi)的theme的屬性來確定主題
4、獲取request會話范圍內(nèi)的theme的屬性來確定主題
5、獲取session會話范圍內(nèi)的theme的屬性來確定主題
6、獲取application會話范圍內(nèi)的theme的屬性來確定主題
7、通過設置名struts.ui.theme的常量(默認值xhtml)來確定主題,該常量可以在struts.properties文件或者struts.xml中設置
排在前面的優(yōu)先級會覆蓋后面的
Struts加載模板是通過主題和模板目錄來實現(xiàn)的
模板目錄包含好幾個主題,每個主題又包含好幾個模板文件
Struts2的模板目錄是通過struts.ui.templateDir常量指定的,該常量的默認值是template.加載模板文件的順序:
1、搜索web應用中/template/主題/模板
2、搜索classpath路徑上的/template/主題/模板
模板默認的文件是*.ftl文件,*.ftl文件是FreeMarker模板文件,也可以修改自己的模板技術(shù),通過修改struts.ui.templateSuffix常量的值,該常量接受以下幾個值:
1、ftl
2、vm: 基于Velocity的模板技術(shù)
3、jsp:基于jsp的模板技術(shù)
struts提供了三個默認的主題:simple,xhtml,css_xhtml
simple:最簡單的主題,最底層的基礎
xhtml:Struts2默認的主題,對simple主題進行了擴展和包裝,在simlp主題上加了如下附加的特性:
1、針對HTML標簽使用標準的兩列表格布局
2、每個HTML標簽增加了配套的label,可以通過labelposition屬性設置位置
3、自動輸出檢驗錯誤提示
4、輸出js的客戶端檢驗
css_xhtml主題對原有的xhtml主題進行擴展,在基礎上加了css樣式控制
自定義主題
創(chuàng)建自定義主題有以下三種方式
1、開發(fā)者完全實現(xiàn)一個全新的主題
2、包裝一個現(xiàn)有的主題
3、擴展一個現(xiàn)有的主題
1、開發(fā)一個全新的太過麻煩
2、包裝一個現(xiàn)有的,xhtml主題就大量使用了包裝技術(shù),如
3、對現(xiàn)有主題進行擴展,開發(fā)者只需要自己寫一份自定義的模板文件,并將該文件放在對應的主題目錄下,還需要在主題目錄下加一個theme.property文件,該文件指定自定義模板是以哪個模板為基礎進行擴展的,比如:
#指定該主題以xhtml主題進行擴展 parent=xhtml表單標簽
所有表單標簽處理類都繼承UIBean類,UIBean包含了一些以下通用屬性
1、特殊的
form:可以實現(xiàn)表單元素與表單的交互
2、與模板相關(guān)的通用屬性
templateDir:指定該表單所用的模板文件目錄
theme:指定該表單所用的主題
3、JavaScript相關(guān)的通用屬性
onclick:指定鼠標在該標簽生成的表單元素上單擊時觸發(fā)的js函數(shù)
ondbclick:指定鼠標在該標簽生成的表單元素上雙擊時觸發(fā)的js函數(shù)
onmousedown:指定鼠標在該標簽生成的表單元素上按下時觸發(fā)的js函數(shù)
onmouseup:指定鼠標在該標簽生成的表單元素上松開時觸發(fā)的js函數(shù)
onmouseover:指定鼠標在該標簽生成的表單元素上懸停時觸發(fā)的js函數(shù)
onmouseout:指定鼠標移出該標簽生成的表單元素上時觸發(fā)的js函數(shù)
onfocus:指定該標簽生成的表單元素得到焦點時觸發(fā)的函數(shù)
onblur:指定該標簽生成的表單元素失去焦點時觸發(fā)的函數(shù)
onkeydown:按下鍵盤上某個鍵觸發(fā)的函數(shù)
onselect:對下拉列表項選擇類型的表單元素,選擇該元素時觸發(fā)js函數(shù)
onchange:對文本框等可以接受輸入的表單元素,指定當值改變時觸發(fā)的js函數(shù)
4、當鼠標在表單元素上懸停時,系統(tǒng)會出現(xiàn)提示,這種特性叫做tooltip
與tooltip相關(guān)的屬性
tooltip:設置此組件的tooltip
tooltipIcon:tooltip圖標的URL路徑
tooltipAboveMousePoint:是否在光標位置上顯示tooltip
tooltipBgColor:設置tooltip的背景色
tooltipBgImg:設置tooltip的背景圖片
tooltipBorderWidth:設置tooltip邊框的寬度
tooltipBorderColor:設置tooltip邊框的顏色
tooltipDelay:設置顯示tooltip延遲時間(毫秒)
tooltipFixCoordinateX:設置固定tooltip在指定的x坐標
tooltipFixCoordinateY:設置固定tooltip在指定的y坐標
tooltipFontColor:設置tooltip字體顏色
tooltipFontFace:設置tooltip字體
tooltipFontSize:設置tooltip字體大小
tooltipFontWeight:設置tooltip是否使用粗體,normal或者bold兩個值
tooltipLeftOfMousePoint:是否在光標左側(cè)顯示tooltip,默認在右側(cè)
tooltipOffsetX:設置tooltip相對光標位置的水平位移
tooltipOffsetY:設置tooltip相對光標位置的垂直位移
tooltipOpacity:設置tooltip的透明度,0-100
tooltioPadding:內(nèi)部間隔
tooltipShaowColor:指定顏色創(chuàng)建陰影
tooltipShaowWidth:指定寬度創(chuàng)建陰影
tooltipStatic:tooltip是否隨著光標移動而移動
tooltipSticky:tooltip是否一直停留在它初始位置,直到另一個tooltip出現(xiàn),或者點擊了html頁面
tooltipStayAppearTIME:消失的時間間隔
tooltipTextAlign:標題與內(nèi)容的對齊方式
tooltipTitle:tooltip標題文字
tooltipTitleColor:tooltip標題文字顏色
tooltipWidth:tooltip寬度
5、設置表單元素的css樣式
cssClass:設置表單元素的class屬性
cssStyle:設置表單元素的style屬性
title:設置表單元素的title屬性
disabled:設置表單元素的disabled屬性
label:設置表單元素的label屬性
labelPosition:設置表單元素的label位置
requiredPosition:設置必填標記位于label的位置
name:表單元素的name屬性
required:定義是否在表單元素的label上添加必填標記
tabIndex:定義表單元素的tabIndex屬性
value:定義value屬性
表單標簽的name和value屬性
每個表單元素被映射成一個Action屬性,當表單被提交,所對應的action被實例化,如果該屬性有值,對應得表單元素會顯示該屬性的值,這個值作為value屬性的值
name設置表單元素的名字,該屬性指定綁定值得表達式
如:
特殊的表單標簽
2、checkboxlist標簽
一次可以創(chuàng)建多個復選框,同時生成多個<input type=“checkbox”…/>的html標簽
包含以下屬性:
1、list:指定的集合生成多個復選框
2、listKey:指定集合元素中的某個屬性作為復選框的value
3、listValue:指定集合元素中的某個屬性作為復選框的標簽
設置表單元素的 name 屬性,與 Action 中的屬性名對應
使用簡單標簽生成多個復選框
使用簡單的map對象生成多個復選框
使用集合中放多個javabean實例生成多個復選框
該javabean的類代碼
3、radio標簽
與checkboxlist不同的是radio生成的是多個單選按鈕
4、select標簽
該標簽會生成一個下拉列表,以下屬性
list:指定下拉列表框的選項
listKey
listValue
multiple:是否允許多選
5、optgroup標簽
生成一個下拉列表框的選項組,該標簽必須放在<s:select…>標簽下使用
6、head標簽
該標簽用于生成對這些css和javascript代碼的引用
7、updownselect標簽
與select的區(qū)別是該標簽生成的額列表框可以上下移動選項,除了可以指定listKey和listValue屬性外,還有以下幾個屬性
1、allowMoveUp:是否顯示上移按鈕,默認為true
2、allowMoveDown:是否顯示下移按鈕,默認為true
3、allowSelectAll:是否顯示全選按鈕,默認為true
4、moveUpLabel:設置上移按鈕上的文本,默認為^
5、moveDownLabel:設置下移按鈕上的文本,默認為v
6、selectAllLabel:設置全選按鈕上的文本,默認為*
8、doubleselect標簽
生成一個級聯(lián)列表框(生成兩個下拉列表框),當選擇第一個下拉列表框時,第二個內(nèi)容也會隨著而動
需要指定兩個下拉列表框的選項
以下屬性:
list:指定輸出第一個下拉列表框的選項的集合
listKey
listValue
doubleList:指定輸出第二個下拉列表框選項的集合
doubleListKey
doubleListValue
doubleName
9、optiontransferselect標簽
生成兩個列表選擇框,并生成系列的按鈕用于控制各選項在兩個下拉列表之間的移動、升降。當提交該表單時,兩個列表選擇對應的請求參數(shù)將被提交
常用屬性
1、addAllToLeftLabel:設置全部移動到左邊按鈕上的文本
2、addAllToRightLabel:設置全部移動到右邊按鈕上的文本
3、addToLeftLabel:設置向左移動按鈕上的文本
4、addToRight:設置向右移動按鈕上的文本
5、allowAddAllToLeft:設置是否出現(xiàn)全部移動到左邊的按鈕
6、allowAddAllToRight:設置是否出現(xiàn)全部移動到右邊的按鈕
7、allowAddToLeft:設置是否出現(xiàn)移動到左邊的按鈕
8、allowAddToRight:設置是否出現(xiàn)移動到右邊的按鈕
9、leftTitle:設置左邊列表框的標題
10、rightTitle:設置右邊列表框的標題
11、allowSelectAll:是否出現(xiàn)選擇全部按鈕
12、selectAllLabel:全部選擇按鈕上的文本
13、doubleList:第二個下拉選項框的集合
14、doubleListKey:第二個下拉選項框的選項的value值
15、doubleListLabel:第二個下拉選項框選項的lable屬性
16、doubleName:第二個下拉選項框的name屬性
17、doubleValue:第二個下拉選項框的value屬性
18、doubleMultiple:第二個下拉選項框是否允許多選
19、list
20、listKey
21、listValue
22、name
23、value
24、multiple
10、token標簽
用于防止重復提交表單的標簽,(避免刷新頁面重復提交)
要使該標簽起作用,在struts.xml文件中啟用TokenInterceptor攔截器或者TokenSeesionStoreInterceptor攔截器
實現(xiàn)原理是在表單中增加一個隱藏域,每次加載頁面時,該隱藏域的值都不相同,如果兩次請求時對應的隱藏域相同,則阻止表單提交(前一次值會保存在session中)
注:生成的隱藏域默認name是struts.token。
使用分成兩步:在jsp中加入<s:token />
配置action啟用攔截器,(并為invalid.token指定物理視圖資源)
注:使用token攔截器,必須顯示配置使用defaultStack攔截器,否則不會默認生效。
非表單標簽
主要用于在頁面中顯示action封裝的信息
1、actionerror:action實例getActionError()不返回null,該標簽輸出系列錯誤
2、actionmessage:實例getActionMessage()不返回null,該標簽輸出系列信息
3、component:用于創(chuàng)建自定義視圖
4、fielderror:輸出表單域的類型轉(zhuǎn)換錯誤、檢驗錯誤提示
總結(jié)
以上是生活随笔為你收集整理的使用Struts2标签的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SketchUp Pro 2023(草图
- 下一篇: RFID识别磁导航二合一AGV传感器|A