Struts 2 標籤庫詳解

Struts提供了五個標籤庫,即:HTMLBeanLogicTemplateNested
HTML 標籤:         用來建立可以和Struts 框架和其餘相應的HTML 標籤交互的HTML 輸入表單
Bean 標籤:         在訪問JavaBeans 及其屬性,以及定義一個新的bean 時使用
Logic 標籤:          管理條件產生的輸出和對象集產生的循環
Template 標籤:   隨着Tiles框架包的出現,此標記已開始減小使用
Nested 標籤:       加強對其餘的Struts 標籤的嵌套使用的能力
 
使用固定屬性名稱的Struts 標籤:
id:    命名自定義標籤建立時的腳本變量名。
name:    指出關鍵字值,在該關鍵字下能夠找到一個存在的bean 。若是給出了scope屬性,則僅僅在scope中查找。不然,根據標準的順序在各類scope中查找:(page, request, session, or application)
property :   指出bean 中的某個屬性,能夠在其中檢索值。若是沒有標明,則使用對象自己的值。
scope:    定義了Bean在哪一個範圍(page, request, session, or application)中被查找。若是沒有標明按順序查找。腳本變量(id)將在相同的範圍中建立。
 
Struts 標籤也支持嵌套引用,例如:
Property="foo.bar.baz"

這至關於進行下面的調用:
getFoo().getBar().getBaz()


或者作爲setter
getFoo().getBar().setBaz(value)
 
雖然Struts 標籤的設計原意是爲了不使用scriptletscriptlet的表達式還可以提供給全部的Struts 標籤使用。但請確保使用完整的表達式:
錯誤:
Html代碼   收藏代碼
  1. <html:link href="'<%= "/" + name %>/index.jsp>'>  
 

正確:
Html代碼   收藏代碼
  1. <html:link href="'<%= "/" + name + "/index.jsp" %>'>    // 表達式必須提供整個屬性值  
 
 
Html 標籤庫
<html>標籤
它有兩個屬性:localexhtml,二者都不是必需的。
Html代碼   收藏代碼
  1. <html:html locale=\"true\">  
 

此行代碼解析後:
Html代碼   收藏代碼
  1. <html lang=\"en\">  
 
 
說明:生成的結果取決於Struts應用程序所位於的服務器的locale。若是你將應用程序部署到一個不一樣locale的服務器,你不須要改變代碼,Locale會自動調整。
 
<base>標籤:表示所包含頁面的絕對位置。這個標籤只有內嵌在head標籤中才有效
Html代碼   收藏代碼
  1. <html:base/>  
 

此行代碼解析後:
Html代碼   收藏代碼
  1. <base href=\"http://www.mymain.com/myStrutsApp/testing.jsp\">  
 
 
<img>標籤
最重要的屬性page:圖象文件的路徑,前面必須帶有一個斜線。
其它屬性:heightwidthalt。
Html代碼   收藏代碼
  1. <html:img page=\"/logo.gif\" height=\"50\" width=\"200\" alt=\"Web Logo\"/>  
 
 
<link>標籤
Html代碼   收藏代碼
  1. <html:link page=\"/index.html\">Click demo</html:link>  
 

此行代碼解析後:
  
Html代碼   收藏代碼
  1. <a href=\"/index.html\">Click demo</a>  
 
 
<errors>標籤:經過一個簡單的<html:errors/>標籤,你就能夠在一個JSP頁面上顯示徹底自定義的錯誤信息。功能超強大!!
說明:這個標籤在Request對象的屬性集合中查找reserved key。若是它找到一個reserved key,它就假設這個key是一個String、或是一個String數組  
     
(它包含在模塊的MessageResources中查找的message keys)、或是類型爲org.apache.struts.action.ActionErrors的一個對象。
        
若是在應用程序資源中存在相應的信息,那麼就能夠用下面這些可選的message keys  
        · errors.header   or errors.prefix
:相應的信息在錯誤信息的單獨列表前顯示。
        · errors.footer or errors.suffix
:相應的信息在錯誤信息的單獨列表後顯示。
 
<form>標籤系列
使用<form>標籤時必須遵循一些規則
 標籤中必須包含一個action屬性,它是這個標籤中惟一必需的屬性。若是不具有該屬性則JSP頁面會拋出一個異常。以後你必須給這個action屬性指定一個有效值。一個有效值是指應用程序的Struts配置文件中元素裏的任何一個子元素的訪問路徑。並且相應的元素中必須有一個name屬性,它的值是form bean的名稱。
Html代碼   收藏代碼
  1. <html:form action=\"/login\" >   
 

若是你有上述一個標籤 ,那麼你的Struts配置文件的元素中必須有一個以下顯示爲粗體的元素:
Xml代碼   收藏代碼
  1. <action-mappings>   
  2.       <action path=\"/login\"   
  3.        type=\"com.javapro.struts.LoginAction\"    
  4.        name=\"loginForm\"  
  5.        scope=\"request\"  
  6.        input=\"/login.jsp\">  
  7.        <forward name=\"success\" path=\"/mainMenu.jsp\"/>  
  8.      </action>  
  9.      .  
  10.      .  
  11.      .  
  12. </action-mappings> // <span style="font-size: 9pt;">這就是說一個</span><span style="font-size: 9pt;">form</span><span style="font-size: 9pt;">標籤是和</span><span style="font-size: 9pt;">form bean</span><span style="font-size: 9pt;">相關聯的</span>  
 
 
任何包含在<form>中用來接收用戶輸入的標籤(<text><password><hidden><textarea><radio><checkbox><select>)必須在相關的form bean中有一個指定的屬性值。好比,若是你有一個屬性值被指定爲「username」<text>標籤,那麼相關的form bean中也必須有一個名爲「username」的屬性。輸入<text>標籤中的值會被用於生成form beanuserName屬性。
 
<form>標籤還有一些不是必須但頗有用的次要屬性。
好比,你能夠用focus屬性來生成JavaScript,它會定焦focus)到該form所包含的一個元素上。使用focus屬性時你須要給它指定元素的名稱。
 
Html代碼   收藏代碼
  1. <body>  
  2. <html:form action=\"/login\" focus=\"password\">  
  3. User Name: <html:text property=\"userName\"/>  
  4. <br>Password: <html:text property=\"password\"/>  
  5. <br><html:submit/>  
  6. </html:form>  
  7. </body>  
 
代碼解析後:
Html代碼   收藏代碼
  1. <body>  
  2. <form name=\"loginForm\" method=\"post\" action=\"/myStrutsApp/login.do\">  
  3. User Name: <input type=\"text\" name=\"userName\" value=\"\">  
  4. <br>Password: <input type=\"text\" name=\"password\" value=\"\">  
  5. <br><input type=\"submit\" value=\"Submit\">  
  6. </form>  
  7. <script language=\"JavaScript\" type=\"text/javascript\">  
  8.    <!--  
  9. if (document.forms[\"loginForm\"].elements[\"password\"].type != \"hidden\")   
  10.        document.forms[\"loginForm\"].elements[\"password\"].focus()  
  11.    // -->  
  12. </script>  
  13.   
  14. </body>  
 
 
有沒有看到這個標籤庫是如何創建JavaScript來定焦到password元素上的? 這也是該庫讓人着迷的地方之一。你不用擔憂如何在客戶端進行編程,它會幫你自動生成。
還能夠看到,<form>標籤中method屬性的缺省值是POST

<text>
標籤、<hidden>標籤、<textarea>標籤、<radio>標籤、<checkbox>標籤、<submit>標籤、<reset>標籤:
都有一個property屬性,最後會被轉換成HTML中的name屬性,固然還有namevalue屬性。

<password>
標籤
Html代碼   收藏代碼
  1. <html:password property=\"password\"   redisplay=\"false\"/>  
 
 
該標籤中的一個很重要的屬性是"redisplay",它用於從新顯示之前輸入到這個區域中的值。該屬性的缺省值爲true。然而,爲了使password不能被從新顯示,你或許但願將該屬性的值設爲false

<select>
標籤和<option>標籤:
 
Html代碼   收藏代碼
  1. <html:select property=\"color\" size=\"3\">  
  2.    <html:option value=\"r\">red</html:option>  
  3.    <html:option value= \"g\">green</html:option>  
  4.    <html:option value= \"b\">blue</html:option>  
  5. </html:select>