Struts Tags

Struts標記庫
JSP視窗組件所使用的struts標記庫由四類標記組成:
2. Bean標記:用來在JSP頁中管理bean
3. 邏輯標記:用來在JSP頁中控制流程
4. HTML標記:用來生成HTML標記,在表單中顯示數據,使用會話ID對URL進行編程
5. 模板標記:使用動態模板構造普通格式的頁
2.1 Bean標記
這個標記庫中包含用於定義新bean、訪問bean及其屬性的標記。Struts框架提供了多種自定義標記用來在JSP頁中處理JavaBean。這些標記被封裝在一個普通的標記庫中,在文件struts-bean.tld中定義了它的標記庫描述器。Bean標記庫將標記定義在四個子類別中:
建立和複製bean的標記
腳本變量定義標記
bean翻譯標記
消息國際化標記
2.1.1 Bean複製標記
可定義新bean,可複製現有bean,還可從現有bean複製屬性。
<bean:define>標記用來:
定義新字符串常數
將現有的bean複製到新定義的bean對象
複製現有bean的屬性來建立新的bean
<bean:define>標記屬性:
屬性描述Id 新定義的bean腳本變量名稱,必須設置Type 定義引入腳本變量的類Value 爲id屬性定義的腳本變量分配一個新的對象Name 目標bean的名稱。若value屬性沒有設置,這個屬性就必須設置property Name屬性定義的bean的屬性名稱,用來定義新的bean
13
Scope 源bean的做用域。若沒有設置,搜索範圍是從頁做用域到應用程序做用域toScope 目標bean的做用域。若沒有設置,默認值是頁做用域
例如:定義一個bean:
<bean:define id=」test」 value=」this is a test」/>
源bean在頁做用域中被拷貝大哦請求做用域中的另外一個bean:
<bean:define id=」targetBean」 name=」sourceBean」
scope=」page」 toScope=」request」/>
2.1.2 定義腳本變量的標記
從多種資源中定義和生成腳本變量,這些資源包括cookie,請求參數,HTTP標頭等等。屬性以下:
屬性描述Id 腳本變量和要定義的頁做用域屬性的名稱Name cookie/標頭/參數的名稱multiple 若是這個屬性設置了任意一個數值,全部匹配的cookie都會被積累並存儲到一個Cookie[](一個數組)類型的bean裏。若無設置,指定cookie的第一個值將做爲Cookie類型的值Value 若是沒有匹配的cookie或數值,就返回這個屬性指定的默認值
例如:
<bean:cookie id=」myCookie」 name=」userName」/>
腳本變量名稱是myCookie,用來建立這個屬性的cookie的名稱是userName。
<bean:header id=」myHeader」 name=」Accept-Language」/>
腳本變量名稱是myHeader,請求標頭的名稱是Accept-Language.
<bean:parameter id=」myParameter」 name=」myParameter」>
腳本變量名稱是myPatameter,它保存的請求參數的名稱也是myParameter.
<bean:include>標記將對一個資源的響應進行檢索,並引入一個腳本變量和字符串類型的頁做用域屬性。這個資源能夠是一個頁,一個ActionForward或一個外部URL。與<jsp:include>的不一樣是資源的響應被存儲到一個頁做用域的bean中,而不是寫入到輸出流。屬性以下:
屬性描述Id 腳本變量和要定義的頁做用域屬性的名稱Page 一個內部資源forward 一個ActionForward Href 要包含的資源的完整URL
例如:
<bean:include id=」myInclude」 page=」MyJsp?x=1」/>
腳本變量的名稱是myInclude,要檢索的響應來自資源MyJsp?x=1。
<bean:resource>標記將檢索web應用中的資源,並引入一個腳本變量和InputStream或字符串類型的頁做用域屬性。若是在檢索資源時發生問題,就會產生一個請求時間異常。屬性以下:
屬性描述
14
Id 腳本變量和要定義的頁做用域屬性的名稱Name 資源的相對路徑Input 若是這個屬性不存在,資源的類型就是字符串
例如:
<bean:resource id=」myResource」 name=」/WEB-INF/images/myResource.xml」/>
腳本變量的名稱是myResource,要檢索的資源的名稱是myResource.xml。
2.1.3 顯示Bean屬性
標記庫中定義了<bean:write>標記,用來將bean的屬性輸送到封裝的JSP頁寫入器。這個標記與<jsp:getProperty>相似,屬性以下:
屬性描述Name 要進行屬性顯示的bean的名稱property 要顯示的屬性的名稱。若是這個屬性類有java.beans.PropertyEditor,getAsText()或toString 方法會被調用Scope Bean的做用域,若沒有設置,搜索範圍是從頁到應用程序做用域Filter 若是設置true,屬性中的全部特殊HTML字符都將被轉化爲相應的實體引用Ignore 若是設置false,當發現屬性時會產生一個請求時間異常,不然返回null
例如:
<bean:write name=」myBean」 property=」myProperty」 scope=」request」
filter=」true」/>
myBean的屬性myProperty將會被顯示,做用域爲請求,若是發現任何HTML特殊字符都將被轉化爲相應的實體引用。
2.1.4 消息標記和國際化
strtus框架支持國際化和本地化。用戶在他們的計算機中定義本身所在的區域,當web應用程序須要輸出一條消息時,它將引用一個資源文件,在這個文件中全部的消息都使用了適當的語言。一個應用程序可能提供了不少資源文件,每一個文件提供了用不一樣語言編寫的消息。若是沒有找到所選語言的資源文件,就將使用默認的資源文件。
struts框架對國際化的支持是使用<bean:message>標記,以及使用java.util數據包中定義的Locale和ResourceBundle類來實現Java2平臺對這些任務的支持。Java.text.MessageFormat類定義的技術能夠支持消息的格式。利用此功能,開發人員不需瞭解這些類的細節就可進行國際化和設置消息的格式。
用strtus實現國際化和本地化:
第一步要定義資源文件的名稱,這個文件會包含用默認語言編寫的在程序中會出現的全部消息。這些消息以「關鍵字-值」的形式存儲,以下:
error.validation.location = The entered location is invalid
這個文件須要存儲在類的路徑下,並且它的路徑要做爲初始化參數傳送給ActionServlet做爲參數進行傳遞時,路徑的格式要符合完整Java類的標準命名規範。好比,若是資源文件存儲在WEB-INF\classes目錄中,文件名是
15
ApplicationResources.properties,那麼須要傳遞的參數值是ApplicationResources。若是文件在WEB-INF\classes\com\test中,那麼參數值就應該是com.test. ApplicationResources.
爲了實現國際化,全部的資源文件必須都存儲在基本資源文件所在的目錄中。基本資源文件包含的是用默認地區語言-本地語言編寫的消息。若是基本資源文件的名稱是ApplicationResources.properties,那麼用其餘特定語言編寫的資源文件的名稱就應該是ApplicationResources_xx.properties(xx爲ISO編碼,如英語是en)。所以這些文件應包含相同的關鍵字,但關鍵字的值是用特定語言編寫的。
ActionServlet的區域初始化參數必須與一個true值一塊兒傳送,這樣ActionServlet就會在用戶會話中的Action.LOCALE_KEY關鍵字下存儲一個特定用戶計算機的區域對象。如今能夠運行一個國際化的web站點,它能夠根據用戶計算機上的設置的區域自動以相應的語言顯示。
咱們還可使用特定的字符串來替換部分消息,就象用java.text.MessageFormat的方法同樣:
error.invalid.number = The number {0} is valid
咱們能夠把字符串{0}替換成任何咱們須要的數字。<bean:message>標籤屬性以下:
屬性描述Key 資源文件中定義消息關鍵字Locale 用戶會話中存儲的區域對象的屬性名稱。若沒有設置,默認值是Action.LOCALE_KEY Bundle 在應用程序上下文中,存儲資源對象的屬性的名稱。若是沒有設置這個屬性,默認值是Action.MESSAGE_KEY arg0 第一個替換參數值arg1 第二個替換參數值arg2 第三個替換參數值arg3 第四個替換參數值
例如:資源文件中定義了一個消息:
info.myKey = The numbers entered are {0},{1},{2},{3}
咱們可以使用下面的消息標記:
<bean:message key=」info.myKey」 arg0=」5」 arg1=」6」 arg2=」7」 arg3=」8」/>
這個信息標記輸出到JSP頁會顯示爲:The numbers entered are 5,6,7,8
2.2 邏輯標記
邏輯庫的標記可以用來處理外觀邏輯而不須要使用scriptlet。Struts邏輯標籤庫包含的標記可以有條件地產生輸出文本,在對象集合中循環從而重複地產生輸出文本,以及應用程序流程控制。它也提供了一組在JSP頁中處理流程控制的標記。這些標記封裝在文件名爲struts-logic.tld的標記包中。邏輯標記庫定義的標記可以執行下列三個功能:
條件邏輯
重複
轉發/重定向響應
16
2.2.1 條件邏輯
struts有三類條件邏輯。第一類能夠比較下列實體與一個常數的大小:
cookie
請求參數
bean或bean的參數
請求標頭
如下列出了這一類標記:
標記功能<equal> 若是常數與被定義的實體相等,返回true <notEqual> 若是常數與被定義的實體不相等,返回true <greaterEqual> 若是常數大於等於被定義的實體,返回true <lessEqual> 若是常數小於等於被定義的實體,返回true <lessThan> 若是常數小於被定義的實體,返回true <greaterThan> 若是常數大於被定義的實體,返回true
這一類的全部標記有相同的屬性
屬性描述Value 要進行比較的常數值Cookie 要進行比較的HTTP cookie的名稱Header 要進行比較的HTTP請求標頭的名稱parameter 要進行比較的HTTP請求參數的名稱Name 若是要進行比較的是bean或bean的屬性,則這個屬性表明bean的名稱property 要進行比較的bean屬性的名稱Scope Bean的做用域,若是沒有指定做用域,則它的搜索範圍是從頁到應用程序
例如:
<logic:equal parameter=」name」 value=」SomeName」>
The entered name is SomeName
</logic:equal>
判斷名爲」name」的請求參數的值是不是」SomeName」。
<logic:greaterThan name=」bean」 property=」prop」 scope=」page」 value=」7」>
The value of bean.Prop is greater than 7
</logic:greaterThan>
判斷在頁的做用域中是否有一個名爲」bean」的bean,它有一個prop屬性,這個屬性的值是否大於7。若是這個屬性可以轉化爲數值,就進行數值比較,不然就進行字符串比較。
第二類條件標記定義了兩個標記:
<logic:present>
<logic:notPresent>
它們的功能是在計算標記體以前判斷特定的項目是否存在。標記的屬性和屬性值決定了要進行檢查的項目。
屬性描述
17
Cookie 由這個屬性指定的cookie將被檢查是否存在Header 由這個屬性指定的請求標頭將被檢查是否存在parameter 由這個屬性指定的請求參數將被檢查是否存在Name 若是沒有設置property屬性,那麼有這個屬性指定的bean將被檢查是否存在。若是設置了,那麼bean和bean屬性都將被檢查是否存在。property 檢查有name屬性指定的bean中是否存在指定的屬性Scope 若是指定了bean的名稱,這就是bean的做用域。若是沒有指定做用域,搜索的範圍從頁到應用程序做用域。Role 檢查當前已經確認的用戶是否屬於特殊的角色User 檢查當前已經確認的用戶是否有特定的名稱
例如:
<logic:notPresent name=」bean」 property=」prop」 scope=」page」>
The bean property bean.prop is present
</logic:notPresent>
標記判斷在頁做用域中是否存在一個名爲」bean」的bean,這個bean有一個prop屬性。
第三類條件標記比較複雜,這些標記根據模板匹配的結果檢查標記體的內容。換句話說,這些標記判斷一個指定項目的值是不是一個特定常數的子字符串:
<logic:match>
<logic:notMatch>
這些標記容許JSP引擎在發現了匹配或是沒有發現時計算標記主體。屬性以下:
屬性描述Cookie 要進行比較的HTTP cookie的名稱Header 要進行比較的的HTTP標頭的名稱parameter 要進行比較的的HTTP請求參數的名稱Name 若要對bean或bean的屬性進行比較,這個屬性是用戶指定bean的名稱location 若是設置了這個屬性的值,將會在這個指定的位置(索引值)進行匹配scope 若是對bean進行比較,這個屬性指定了bean的做用域。若是沒有設置這個參數,搜索範圍是從頁到應用程序做用域property 要進行比較的bean的屬性名稱value 要進行比較的常數值
例如:
<logic:match parameter=」name」 value=」xyz」 location=」1」>
The parameter name is a sub-string of the string xyz from index 1
</logic:match>
標記檢查名爲」name」的請求參數是不是」xyz」的子字符串,可是子字符串必須從」xyz」的索引位置1開始(也就是說子字符串必須是」y」或」yz」)。
2.2.2 重複標記
在邏輯標記庫中定義了<logic:iterate>標記,它可以根據特定集合中元素的數目對標記體的內容進行重複的檢查。集合的類型能夠是java.util.Iterator,java.util.Collection
18
,java.util.Map或是一個數組。有三種方法能夠定義這個集合:
使用運行時間表達式來返回一個屬性集合的集合
將集合定義爲bean,而且使用name屬性指定存儲屬性的名稱。
使用name屬性定義一個bean,而且使用property屬性定義一個返回集合的bean屬性。
當前元素的集合會被定義爲一個頁做用域的bean。屬性以下,全部這些屬性都能使用運行時表達式。
屬性描述collection 若是沒有設置name屬性,它就指定了要進行重複的集合Id 頁做用域bean和腳本變量的名稱,它保存着集合中當前元素的句柄indexed 頁做用域JSP bean的名稱,它包含着每次重複完成後集合的當前索引Length 重複的最大次數Name 做爲集合的bean的名稱,或是一個bean名稱,它由property屬性定義的屬性,是個集合Offset 重複開始位置的索引property 做爲集合的Bean屬性的名稱Scope 若是指定了bean名稱,這個屬性設置bean的做用域。若沒有設置,搜索範圍從頁到應用程序做用域Type 爲當前定義的頁做用域bean的類型
例如:
<logic:iterate id=」currentInt」
collection=」<% =myList %>」
type=」java.lang.Integer」
offset=」1」
length=」2」>
<% =currentint %>
</logic:iterate>
代碼將從列表中的第一個元素開始重複兩個元素而且可以讓當前元素做爲頁做用域和java.lang.Integer類型的腳本變量來使用。也就是說,若是myList包含元素1,2,3,4等,代碼將會打印1和2。
2.2.3 轉發和重定向標記
轉發標記
<logic:forward>標記可以將響應轉發給重定向到特定的全局ActionForward上。ActionForward的類型決定了是使用PageContext轉發響應,仍是使用sendRedirect將響應進行重定向。此標記只有一個」name」屬性,用來指定全局ActionForward的名稱,例如:
<logic:forward name=」myGlobalForward」/>
重定向標記
<logic:redirect>標記是一個可以執行HTTP重定向的強大工具。根據指定的不一樣屬性,它可以經過不一樣的方式實現重定向。它還容許開發人員指定重定向URL的查詢參數。屬性以下:
19
屬性描述Forward 映射了資源相對路徑的ActionForward Href 資源的完整URL Page 資源的相對路徑Name Map類型的頁名稱,請求,會話或程序屬性的名稱,其中包含要附加大哦重定向URL(若是沒有設置property屬性)上的「名稱-值」參數。或是具備Map類型屬性的bean名稱,其中包含相同的信息(沒有設置property屬性) Property Map類型的bean屬性的名稱。Bean的名稱由name屬性指定。Scope 若是指定了bean的名稱,這個屬性指定搜索bean的範圍。若是沒有設置,搜索範圍從頁到應用程序做用域ParamID 定義特定查詢參數的名稱ParamName 字符串類型的bean的名稱,其中包含查詢參數的值(若是沒有設置paramProperty屬性);或是一個bean的名稱,它的屬性(在paramProperty屬性中指定)包含了查詢參數值paramProperty 字符串bean屬性的名稱,其中包含着查詢參數的值ParamScope ParamName定義的bean的搜索範圍
使用這個標記時至少要指定forward,href或page中的一個屬性,以便標明將響應重定向到哪一個資源。
2.3 HTML標記
Struts HTML標記能夠大體地分爲如下幾個功能:
顯示錶單元素和輸入控件
顯示錯誤信息
顯示其餘HTML元素
2.3.1 顯示錶單元素和輸入控件
struts將HTML表單與爲表單操做而定義的ActionForm bean緊密聯繫在一塊兒。表單輸入字段的名稱與ActionForm bean裏定義的屬性名稱是對應的。當第一次顯示錶單時,表單的輸入字段是從ActionForm bean中移植過來的,當表單被提交時,請求參數將移植到ActionForm bean實例。
全部能夠在<form>標記中使用的用來顯示HTML輸入控件的內嵌標記都使用下列屬性來定義JavaScript事件處理器。
屬性描述Onblur 字段失去了焦點Onchange 字段失去了焦點而且數值被更改了Onclick 字段被鼠標點擊Ondblclick 字段被鼠標雙擊Onfocus 字段接收到輸入焦點Onkeydown 字段擁有焦點而且有鍵按下
20
onkeypress 字段擁有焦點而且有鍵按下並釋放Onkeyup 字段擁有焦點而且有鍵被釋放onmousedown 鼠標指針指向字段而且點擊onmousemove 鼠標指針指向字段而且在字段內移動onmouseout 鼠標指針指向控件,可是指針在元素外圍移動onmouseover 鼠標指針沒有指向字段,可是指針在元素內部移動Onmouseup 鼠標指針指向字段,而且釋放了鼠標按鍵
<form>元素中可以被定義的其餘通常屬性有:
屬性描述Accesskey 定義訪問輸入字段的快捷鍵Style 定義輸入字段的樣式styleClass 定義輸入字段的樣式表類Tabindex 輸入字段的tab順序
a) 表單標記
<html:form>標記用來顯示HTML標記,能夠指定AcitonForm bean的名稱和它的類名。若是沒有設置這些屬性,就須要有配置文件來指定ActionMapping以代表當前輸入的是哪一個JSP頁,以及從映射中檢索的bean名和類。若是在ActionMapping指定的做用域中沒有找到指定的名稱,就會建立並存儲一個新的bean,不然將使用找到的bean。
<form>標記可以包含與各類HTML輸入字段相對應的子標記。
<html:form>標記屬性以下:
屬性描述Action 與表單相關的操做。在配置中,這個操做也用來標識與表單相關的ActionForm bean Enctype 表單HTTP方法的編碼類型Focus 表單中須要初始化焦點的字段Method 表單使用的HTTP方法Name 與表單相關的ActionForm bean的名稱。若是沒有設置這個屬性,bean的名稱將會從配置信息中得到Onreset 表單復位時的JavaScript事件句柄Onsubmit 表單提交時的JavaScript事件句柄Scope 搜索ActionForm bean的範圍。若是沒有設置,將從配置文件中獲取Style 使用的格式styleClass 這個元素的格式表類Type ActionForm bean的完整名稱。若是沒有設置,將從配置文件得到
例如:
<html:form action=」validateEmploee.do」 method=」post」>
</html:form>
與表單相關的操做路徑是validateEmployee,而表單數據是經過POST傳遞的。對於這個表單來講,ActionForm bean的其餘信息,如bean名稱類型,做用域,都是從表單指定操做的ActionMapping中檢索獲得的:
21
<form-beans>
<form-bean name=」empForm」 type=」com.example.EmployeeForm」/>
</form-beans>
<action-mappings>
<action path=」/validateEmployee」
type=」com.example.ValidateExampleAction」
name=」empForm」
scope=」request」
input=」/employeeInput.jsp」>
<forward name=」success」 path=」/employeeOutput.jsp」>
</action>
</action-mapping>
若是配置文件中包含上述信息,而且請求URI的*.do被映射到ActionServlet,與表單相關的ActionForm bean的名稱,類型和做用域分別是empForm,com.example.EmployeeForm和request.這些屬性也可使用<html:form>標記屬性進行顯示的定義。
如下標記必須嵌套在<html:form>標記裏
b) 按鈕和取消標記
<html:button>標記顯示一個按鈕控件;<html:cancel>標記顯示一個取消按鈕。屬性以下:
屬性描述Property 定義在表單被提交時返回到服務器的請求參數的名稱Value 按鈕上的標記
c) 復位和提交標記
<html:reset>和<html:submit>標記分別可以顯示HTML復位按鈕和提交按鈕。
d) 文本和文本區標記
<html:text>和<html:textarea>標記分別HTML文本框和文本區,屬性以下:
屬性描述Property 定義當表單被提交時送回到服務器的請求參數的名稱,或用來肯定文本元素當前值的bean的屬性名稱Name 屬性被查詢的bean的名稱,它決定了文本框和文本區的值。若是沒有設置,將使用與這個內嵌表單相關的ActionForm的名稱
<html:text>標記還有如下屬性:
屬性描述Maxlength 可以輸入的最大字符數
22
Size 文本框的大小(字符數)
<html:textarea>標記特有的屬性以下:
屬性描述Rows 文本區的行數Cols 文本區的列數
e) 檢查框和複選框標記
<html:checkbox>標記可以顯示檢查框控件。<html:multibox>標記可以顯示HTML複選框控件,請求對象在傳遞檢查框名稱時使用的getParameterValues()調用將返回一個字符串數組。屬性以下:
屬性描述Name Bean的名稱,其屬性會被用來肯定檢查是否以選中的狀態顯示。若是沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。Property 檢查框的名稱,也是決定檢查框是否以選中的狀態顯示的bean屬性名稱。在複選框的狀況下,這個屬性必須是一個數組。Value 當檢查框被選中時返回到服務器的請求參數的值
例如:
<html:checkbox property=」married」 value=」Y」/>
一個名爲married的檢查框,在表單提交時會返回一個」Y」.
f) 文件標記
<html:file>標記能夠顯示HTML文件控件。屬性以下:
屬性描述Name Bean的名稱,它的屬性將肯定文件控件中顯示的內容。若是沒設置,將使用與內嵌表單相關的ActionForm bean的名稱property 這個屬性定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來肯定文件控件中顯示內容的bean屬性名稱Accept 服務器可以處理的內容類型集。它也將對客戶瀏覽器對話框中的可選文件類型進行過濾Value 按鈕上的標記,這個按鈕可以在本地文件系統中瀏覽文件
g) 單選鈕標記
<html:radio>標記用來顯示HTML單選鈕控件,屬性以下:
屬性描述Name Bean的名稱,其屬性會被用來肯定單選鈕是否以選中的狀態顯示。若是沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。property 當表單被提交時送回到服務器的請求參數的名稱,以及用來肯定單選鈕是否以被選中狀態進行顯示的bean屬性的名稱
23
Value 當單選鈕被選中時返回到服務器的值
h) 隱藏標記
<html:hidden>標記可以顯示HTML隱藏輸入元素,屬性以下:
屬性描述Name Bean的名稱,其屬性會被用來肯定隱藏元素的當前值。若是沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來肯定隱藏元素當前值的bean屬性的名稱Value 用來初始化隱藏輸入元素的值
i) 密碼標記
<html:password>標記可以顯示HTML密碼控件,屬性以下:
屬性描述maxlength 可以輸入的最大字符數Name Bean的名稱,它的屬性將用來肯定密碼元素的當前值。若是沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來肯定密碼元素當前值的bean屬性的名稱redisplay 在顯示這個字段時,若是相應的bean屬性已經被設置了數據,這個屬性決定了是否顯示密碼的內容Size 字段的大小
j) 選擇標記
<html:select>標記可以顯示HTML選擇控件,屬性以下:
屬性描述multiple 代表這個選擇控件是否容許進行多選Name Bean的名稱,它的屬性肯定了哪一個。若是沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來肯定哪一個選項須要被選中的bean屬性的名稱Size 可以同時顯示的選項數目Value 用來代表須要被選中的選項
k) 選項標記(這個元素須要嵌套在<html:select>標記裏)
<html:option>標記用來顯示HTML選項元素集合,屬性以下:
24
屬性描述collection Bean集合的名稱,這個集合存儲在某個做用域的屬性中。選項的數目與集合中元素的數目相同。Property屬性可以定義選項值所使用的bean屬性,而labelProperty屬性定義選項標記所使用的bean的屬性labelName 用來指定存儲於某個做用域的bean,這個bean是一個字符串的集合,可以定義<html:option>元素的標記(若是標誌與值不相同) labelProperty 與collection屬性共同使用時,用來定義了存儲於某個做用域的bean,這個bean將返回一個字符串集合,可以用來寫入<html:option>元素的value屬性Name 若是這是惟一被指定的屬性,它就定義了存儲於某個做用域的bean,這個bean將返回一個字符串集合,可以用來寫入<html:option>元素的value屬性property 這個屬性在與collection屬性共同使用時,定義了每一個要顯示選項值的獨立bean的name屬性。若是不是與collection屬性共同使用,這個屬性定義了由name屬性指定的bean的屬性名稱(若是有name屬性),或是定義了一個ActionForm bean,這個bean將返回一個集合來寫入選項的值
咱們看一下這個標記的一些例子:
<html:option collection=」optionCollection」 property=」optionValue」
labelProperty=」optionLabel」/>
標記假設在某個做用域中有一個名爲optionCollection的集合,它包含了一些具備optionValue屬性的獨立的bean,每一個屬性將做爲一個選項的值。每一個選項的標誌由bean的optionLabel屬性屬性進行定義。
<html:option name=」optionValues」 labelName=」optionLabels」/>
標記中optionValues表明一個存儲在某個做用域中的bean,它是一個字符串集合,可以用來寫入選項的值,而optionLabels表明一個存儲在某個做用域中的bean,它也是一個字符串集合,可以用來寫入選項的標誌。
2.3.2.顯示錯誤信息的標記
<html:errors>標記可以與ActionErrors結合在一塊兒來顯示錯誤信息。這個標記首先要從當前區域的資源文件中讀取消息關鍵字errors.header,而後顯示消息的文本。接下去它會在ActionErrors對象(一般做爲請求參數而存儲在Action.ERROR_KEY關鍵字下)中循環,讀取單個ActionError對象的消息關鍵字,從當前區域的資源文件中讀取並格式化相應的消息,而且顯示它們。而後它讀取與errors.footer關鍵字相對應的消息而且顯示出來。
經過定義property屬性可以過濾要顯示的消息,這個屬性的值應該與ActionErrors對象中存儲ActionError對象的關鍵字對應。屬性以下:
屬性描述Bundle 表示應用程序做用域屬性的名稱,它包含着消息資源,其默認值Acion.MESSAGE_KEY Locale 表示會話做用域屬性的名稱,它存儲着用戶當前登陸的區域信息。其默認值是Action.ERROR_KEY
25
Name 表示請求屬性的名稱,它存儲着ActionErrors對象。其默認值是Action.ERROR_KEY property 這個屬性指定了ActionErrors對象中存儲每一個獨立ActionError對象的關鍵字,它能夠過濾消息
例子:
<html:errors/>
顯示集合中全部的錯誤。
<html:errors property=」missing.name」/>
顯示存儲在missing.name關鍵字的錯誤。
2.3.3.其餘HTML標記
struts HTML標記還定義了下列標記來顯示其餘HTML元素:
<html:html> : 顯示HTML元素
<html:img> : 顯示圖象標記
<html:link> : 顯示HTML連接或錨點
<html:rewrite> : 建立沒有錨點標記的URI
這些標記的詳細內容請參照struts文檔。
2.4. 模板標記
動態模板是模塊化WEB頁佈局設計的強大手段。Struts模板標記庫定義了自定義標記來實現動態模板。
2.4.1.插入標記
<template:insert>標記可以在應用程序的JSP頁中插入動態模板。這個標記只有一個template屬性,用來定義模板JSP頁。要插入到模板的頁是有多個<template:put>標記來指定的,而這些標記被定義爲<template:insert>標記的主體內容。
2.4.2.放置標記
<template:put>標記是<template:insert>標記內部使用的,用來指定插入到模板的資源。屬性以下:
屬性描述content 定義要插入的內容,好比一個JSP文件或一個HTML文件direct 若是這個設置爲true,由content屬性指定的內容將直接顯示在JSP上而不是做爲包含文件Name 要插入的內容的名稱Role 若是設置了這個屬性,只有在當前合法用戶具備特定角色時才能進行內容的插入。
26
2.4.3.得到標記
在模板JSP頁中使用<template:get>標記可以檢索由<template:put>標記插入到JSP頁的資源。屬性以下:
屬性描述Name 由<template:put>標記插入的內容的名稱Role 若是設置了這個屬性,只有在當前合法用戶具備特定角色時才能進行內容的檢索
2.4.4.使用模板標記
首先編寫一個模板JSP頁,它將被全部的web頁使用:
<html>
<%@ taglib uri=」/template」 prefix=」template」 %>
<head>
<title></title>
</head>
<body>
<table width=」100%」 height=」100%」 >
<tr height=」10%」>
<td>
<template:get name=」header」/>
</td>
</tr>
<tr height=」80%」>
<td>
<template:get name=」content」/>
</td>
</tr>
<tr height=」10%」>
<td>
<template:get name=」footer」/>
</td>
</tr>
</table>
</body>
</html>
咱們將這個文件命名爲template.jsp。這個文件使用<template:get>標記來得到由JSP頁使用<template:put>標記提供的內容,而且將內容在一個HTML表格中顯示出來。這三個內容是標題,內容和頁腳。典型的內容JSP會是這樣:
<%@ taglib uri=」/template」 prefix=」/template」 %>
<template:insert template=」template.jsp」>
<template:put name=」header」 content=」header.html」/>
27
<template:put name=」content」 content=」employeeList.jsp」/>
<template:put name=」footer」 content=」footer.html」/>
</template:insert>
這個應用程序JSP頁使用<template:insert標記來定義模板,而後使用<template:put>標記將特定內容名稱指定的資源放到模板JSP頁中。若是咱們有上百個佈局相同的頁,但忽然想改變這個模板,咱們只須要改變template.jsp文件。html

相關文章
相關標籤/搜索