程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Struts框架

Struts框架

編輯:JAVA編程入門知識

  序
  
  經過了兩個星期不懈努力,今天終於完成了對strtus整體架構及核心標簽庫的介紹。從幾乎不懂struts和Html標簽,到可以給別人解決涉及struts的一些小問題,這與朋友的幫助和我的努力是分不開的,但我更希望它能給那些想要學的,正在學的和已經學過的人帶來不同的益處。我知道我是個新手,但我會用百倍的努力繼續在這個領域進行深入性的和擴展性的學習與研究。同時,就象我說的,我們會用實際行動證實我們為你提供的幫助。
  這章適合做參考資料,他不僅包含了對struts的整體架構及主要組件的具體和清楚的介紹,而且對於很多人都關注的struts標簽庫也進行了細致的介紹,可以說它是你手頭一個可以用來進行參考的資料。當你哪裡不清楚,你完全可以到這裡查詢。為了你查詢方便,我做了一個目錄。
  由於開源軟件不斷發展,所以這不可能是最後版本,我會不斷進行內容的修改和新特性的添加。比如strus1.1的Nested Tag,但由於個人技術水平和時間等多方面原因,速度不會太快,這就需要大家的幫助,希望大家共同參加一些資料的整理。
  最後,我真心的感謝jag,banq,steelg,holen,七老爺,還有混血兒,要不是他,我會更早完成這個資料的,不過他又一次鍛煉了我的意志。
  我已經盡力避免在文字或代碼中出現錯誤,但是人無完人,疏漏總是難免的。假如你在閱讀發現了其中的錯誤,比如文字的錯誤或錯誤的代碼,我非常希望你將這些信息反饋給我,這樣會幫助其他人解決碰到的問題,也會不斷完善這套資料。我的郵件是: [email protected] <mailto:[email protected]> QQ:36983608
  希望本資料能給你帶來幫助!
  
  目錄
  
  序…………………………………………………………………………………………………1
  目錄………………………………………………………………………………………………2
  Struts框架
  1.Struts壓縮包內容.................................................... 3
  2.Struts體系結構..........................................................4
  3.Struts框架中的組件..................................................... 5
  3.1 Struts配置文件................................................…...…5
  3.2 ActionServlet類....................................................8
  3.3 ActionMapping類......................................................10
  3.4 Action類 ..........................................................10
  3.5 ActionForm類 ......................................................11
  3.6 ActionForward類 ...................................................12
  3.7 錯誤處理 ...........................................................12
  4.Struts標記庫 ............................................................13
  4.1 Bean標記.......................................................... 13
  4.1.1 Bean復制標記 ...................................................14
  4.1.2 定義腳本變量的標記 .............................................14
  4.1.3 顯示Bean屬性.................................................. 15
  4.1.4 消息標記和國際化 ...............................................15
  4.2 邏輯標記 ...........................................................16
  4.2.1 條件邏輯 .......................................................17
  4.2.2 重復標記 .......................................................18
  4.2.3 轉發和重定向標記 ...............................................19
  4.3 HTML標記 .........................................................20
  4.3.1 顯示表單元素和輸入控件 .........................................20
  4.3.2 顯示錯誤信息的標記 .............................................24
  4.3.3 其他HTML標記 ..................................................25
  
  Struts框架
  struts框架具有組件的模塊化,靈活性和重用性的優點,同時簡化了基於MVC的web應用程序的開發。
  本章具體討論struts架構。我們將看到struts是如何清楚地區分控制,事務邏輯和外觀,從而簡化了開發應用程序過程的。我們還將介紹struts提供的類如何使得開發工作更加簡單,這些類包括:
  控制程序流程的類
  實現和執行程序事務邏輯的類
  自定義的標 記庫使得創建和驗證HTML表單更加輕易
  1.Struts壓縮包內容
  文件夾jakarta-struts-1.0.2包含兩個目錄,lib和webapps。在lib目錄中有使用struts創建應用程序時所需的文件:
  文件 描述
  jdbc2_0-stdext.jar 包含JDBC2.0 Optional Package API類。假如我們要使用struts提供的數據資源,就需要將這個文件拷貝到WEB-INFlib下
  Struts.jar 包含struts中所有的Java類。同樣也需要拷貝到WEB-INFlib下
  *.tld 標記庫描述器文件,描述了多個struts標記庫中的自定義標記。同樣要拷貝到WEB-INFlib下
  在webapps目錄下有如下文件:
  Web應用程序 描述
  Struts-blank.war 一個簡單的web應用程序
  Struts-documentation.war 包含struts站點上所有struts文檔
  Struts-example.war Struts很多特性的示范
  Struts-exercisetaglib.war 主要用於對自定義標簽庫進行增加而使用的測試頁,但也可以示范如何使用struts標記
  Struts-template.war 包含struts模板標記的介紹和范例
  Struts-upload.war 一個簡單的例子,示范如何使用struts框架上傳文件
  2.Struts體系結構
  讓我們從MVC角度觀察struts框架中的組件
  
  框架中三個部分:模型,視窗和控制器。
  模型
  在struts框架中,模型分為兩個部分:
  系統的內部狀態
  可以改變狀態的操作(事務邏輯)
  內部狀態通常由一組ActinForm JavaBean表示。根據設計或應用程序復雜度的不同,這些Bean可以是自包含的並具有持續的狀態,或只在需要時才獲得數據(從某個數據庫)。
  大型應用程序通常在方法內部封裝事務邏輯(操作),這些方法可以被擁有狀態信息的bean調用。比如購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發定貨信息。
  小型程序中,操作可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。
  建議用戶將事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開。
  視窗
  由jsp建立,struts包含擴展自定義標簽庫,可以簡化創建完全國際化用戶界面的過程。
  控制器
  struts中,基本的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。
  3.Struts框架中的組件
  
  (由於ROSE工具還未能下載,只能找來這幅圖,它說明了一定問題,非凡是ActionErrors,但它並沒有將ActionMapping,JSP和Tag Library包含進來,有時間作完替換)
  框架中所使用的組件:
  ActionServlet 控制器
  ActionClass 包含事務邏輯
  ActionForm 顯示模塊數據
  ActionMapping 幫助控制器將請求映射到操作
  ActionForward 用來指示操作轉移的對象
  ActionError 用來存儲和回收錯誤
  Struts標記庫 可以減輕開發顯示層次的工作
  下面我們看看各安閒框架中所扮演的角色和責任。
  3.1 Struts配置文件
  這是將struts組件結合在一起的東東:struts-config.XML。默認值
  WEB-INFstruts-config.xml。配置文件可以定義:
  全局轉發
  ActionMapping類
  ActionForm bean
  JDBC數據源
  配置全局轉發
  全局轉發用來在JSP頁之間創建邏輯名稱映射。轉發都可以通過對調用操作映射的實例來獲得,例如:
  actionMappingInstace.findForward(“logicalName”);
  全局轉發的例子:(所有的例子我沒有進行解釋,一是結合表可以理解,二是例子大部分來自系列四的示例,你應該在作完實驗後,再來看一遍)
  <global-forwards>
  <forward name="bookCreated" path="/BookView.jsp"/>
  </global-forwards>
  屬性 描述
  Name 全局轉發的名字
  Path 與目標URL的相對路徑
  
  配置ActionMapping
  ActionMapping對象幫助進行框架內部的流程控制,它們可將請求URI映射到Action類,並且將Action類與ActionForm bean相關聯。ActionServlet在內部使用這些映射,並將控制轉移到特定Action類的實例。所有Action類使用perform()方法實現特定應用程序代碼,返回一個ActionForward對象,其中包括響應轉發的目標資源名稱。例如:
  <action-mappings>
  <action path="/createBook"
  type="BookAction"
  name="bookForm"
  scope="request"
  input="/CreateBook.jsp">
  </action>
  <forward name=”failure” path=”/CreateBook.jsp”/>
  <forward name=”cancel” path=”/index.jsp”/>
  </action-mappings>
  屬性 描述
  Path Action類的相對路徑
  Name 與本操作關聯的Action bean的名稱
  Type 連接到本映射的Action類的全稱(可有包名)
  Scope ActionForm bean的作用域(請求或會話)
  Prefix 用來匹配請求參數與bean屬性的前綴
  Suffix 用來匹配請求參數與bean屬性的後綴
  attribute 作用域名稱。
  className ActionMapping對象的類的完全限定名默認的類是org.apache.struts.action.ActionMapping
  input 輸入表單的路徑,指向bean發生輸入錯誤必須返回的控制
  unknown 設為true,操作將被作為所有沒有定義的ActionMapping的URI的默認操作
  validate 設置為true,則在調用Action對象上的perform()方法前,ActionServlet將調用ActionForm bean的validate()方法來進行輸入檢查
  通過<forward>元素,可以定義資源的邏輯名稱,該資源是Action類的響應要轉發的目標。
  屬性 描述
  Id ID
  ClassName ActionForward類的完全限定名,默認是org.apache.struts.action.ActionForward
  Name 操作類訪問ActionForward時所用的邏輯名
  Path 響應轉發的目標資源的路徑
  redirect 若設置為true,則ActionServlet使用sendRedirect()方法來轉發資源
  
  配置ActionForm Bean
  ActionServlet使用ActionForm來保存請求的參數,這些bean的屬性名稱與HTTP請求參數中的名稱相對應,控制器將請求參數傳遞到ActionForm bean的實例,然後將這個實例傳送到Action類。例子:
  <form-beans>
  <form-bean name="bookForm" type="BookForm"/>
  </form-beans>
  屬性 描述
  Id ID
  className ActionForm bean的完全限定名,默認值是org.apache.struts.action.ActionFormBean
  Name 表單bean在相關作用域的名稱,這個屬性用來將bean與ActionMapping進行關聯
  Type 類的完全限定名
  
  配置JDBC數據源
  用<data-sources>元素可以定義多個數據源。
  屬性 描述
  Id ID
  Key Action類使用這個名稱來尋找連接
  Type 實現JDBC接口的類的名稱
  下面屬性需要<set-property>元素定義,在框架1.1版本中已不在使用,但你可用<data-source>元素。例子:
  <data-sources>
  <data-source id=”DS1”
  key=”conPool”
  type=”org.apache.struts.util.GenericDataSource”
  <set-property id=”SP1”
  autoCommit="true"
  description="Example Data Source Configuration"
  driverClass="org.test.mm.mysql.Driver"
  maxCount="4"
  minCount="2"
  url="jdbc:mysql://localhost/test"
  user="struts"
  passWord="wrox" />
  <data-source/>
  </data-sources>
  屬性 描述
  desciption 數據源的描述
  autoCommit 數據源創建的連接所使用的默認自動更新數據庫模式
  driverClass 數據源所使用的類,用來顯示JDBC驅動程序接口
  loginTimeout 數據庫登陸時間的限制,以秒為單位
  maxCount 最多能建立的連接數目
  minCount 要創建的最少連接數目
  password 數據庫訪問的密碼
  readOnly 創建只讀的連接
  User 訪問數據庫的用戶名
  url JDBC的URL
  通過指定要害字名稱,Action類可以訪問數據源,比如:
  javax.sql.DataSource ds = servlet.findDataSource(“conPool”);
  javax.sql.Connection con = ds.getConnection();
  
  3.2 ActionServlet類
  框架中的控制器組件是有org.apache.struts.action.ActionServlet類實現的,這個類是javax.servlet.http.HttpServlet類的擴展。
  Struts controller基本功能是:
  1. 截獲用戶的Http請求
  2. 把這個請求映射到相應的Action類,假如這是此類收到的第一個請求,將初始化實例並
  緩存。
  3. 創建或發現一個ActionForm bean實例(看配置文件是否定義),然後將請求過程移植到
  bean.
  4. 調用Action實例的perform()方法並將ActioForm bean,Action Mapping對象,request
  和response對象傳給它。
  如:public ActionForword perform(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  5.perform返回一個ActionForword對象,此對象連接到相應的jsp頁面.
  ActionServlet配置
  我們需要在web.xml中聲明ActionServlet,並且將它配置成啟動時進行加載。以下為可以配置的初始化參數:
  參數 默認值 描述
  application null 應用程序的資源集合的類
  bufferSize 4096 文件上傳的緩沖區大小
  config /WEB-INF/struts-config.xml 配置文件的位置和名稱
  content Text/html 默認的內容類型
  debug 0 程序調試的級別
  detail 0 程序調試細節的級別
  factory null 消息資源工廠,用於國際化中解釋消息資源
  formBean org.apache.struts.action.ActionFormBean 封裝ActionForm bean信息的類的名稱
  forward org.apache.struts.action.ActionForward 封裝ActionForward對象信息的類的名稱
  locale true 為true,將在用戶會話中存儲一個本地對象
  mapping org.apache.struts.action.ActionForward 封裝ActionMapping信息的類的名稱
  maxFileSize 250M 上傳文件的最大尺寸
  multipartClass org.apache.struts.action.ActionForward 處理多部分請求的類的名稱
  noCache False HTTP標頭是否要設置為禁止緩存
  Null True 設置為true,對於無效的信息要害字將返回null
  tempDir 作為一個servlet參數提供給程序的工作目錄 處理下載文件是使用的臨時工作目錄
  validate True 是否使用新格式的配置文件
  validating True 是否對配置文件進行有效性分析
  大多數情況下,標准的servlet就能夠滿足用戶需要。
  第一次收到特定請求的URI時,ActionServlet將適當的Action類進行實例化,然後ActionServlet在Action類實例中以servlet為變量名存儲一個引用。當被實例化後,Action類會被暫存以備再用。
  ActionServlet也提供一些方法,由Action類用來訪問數據源和轉發目標之類的資源。
  ActionServlet方法
  ActinServlet提供了一組能夠被Action對象使用的方法。
  Struts API的全部信息在struts-documentation.war中可以找到。動態的添加或刪除,這些方法只影響應用程序當前的實例:
  public void addFormBean(ActionFormBean formBean)
  public void removeFormBean(ActionFormBean formBean)
  public void addForward(ActionForward actionForward)
  public void removeForward(ActionForward actionForward)
  public void addMapping(ActionMapping actionMapping)
  public void removeMapping(ActionMapping actionMapping)
  根據名稱查找對象:
  public ActionFormBean findFormBean(String name)
  public ActionForward findForward(String name)
  public ActionMapping findMapping(String name)
  用來處理數據源:
  public void addDataSource(String key , DataSource ds)
  public DataSource findDataSource(String key)
  我們還可以:
  使用destroy()方法結束ActionServlet
  使用reload()方法從struts配置文件將信息重新加載。
  
  3.3 ActionMapping類
  將特定請求映射到特定Action的相關信息存儲在ActionMapping中,ActionServelt將ActionMapping傳送到Action類的perform()方法,Action將使用ActionMapping的findForward()方法,此方法返回一個指定名稱的ActionForward,這樣Action就完成了本地轉發。若沒有找到具體的ActionForward,就返回一個null.
  public ActionForward findForward(String name)
  可在映射中動態添加ActionForward:
  public void addForward(ActionForward forward)
  可返回與映射關聯的表單bean:
  public String getName()
  可返回映射的屬性域(會話或請求)
  public String getScope()
  
  3.4 Action類
  Action類真正實現應用程序的事務邏輯,它們負責處理請求。在收到請求後,ActionServlet會:
  為這個請求選擇適當的Action
  假如需要, 創建Action的一個實例
  調用Action的perform()方法
  假如ActionServlet不能找到有效的映射,它會調用默認的Action類(在配置文件中定義)。假如找到了ActionServlet將適當的ActionMapping類轉發給Action,這個Action使用ActionMapping找到本地轉發,然後獲得並設置ActionMapping屬性。根據servlet的環境和被覆蓋的perform()方法的簽名,ActionServlet也會傳送ServletRequest對象或HttpServletRequest對象。
  所有Action類都擴展org.apache.struts.action.Action類,並且覆蓋類中定義的某一個perform()方法。有兩個perform()方法:
  處理非HTTP(一般的)請求:
  public ActionForward perform(ActionMapping action,
  AcionForm form,
  ServletRequest request,
  ServletResponse response)
  throws IOException,ServletException
  處理HTTP請求:
  public ActionForward perform(ActionMapping action,
  AcionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws IOException,ServletException
  Action類必須以“線程安全”的方式進行編程,因為控制器會令多個同時發生的請求共享同一個實例,相應的,在設計Action類時就需要注重以下幾點:
  不 能使用實例或靜態變量存儲特定請求的狀態信息, 它們會在同 一個操作中共享跨越請求的全局資源
  假如要訪問的資源(如JavaBean和會話變量)在並行訪問時需要進行保護, 那麼訪問就要進行同 步
  Action類的方法
  除了perform()方法外,還有以下方法:
  可以獲得或設置與請求相關聯的區域:
  public Locale getLocale(HttpServletRequest request)
  public void setLocale(HttpServletRequest request,Locale locale)
  為應用程序獲得消息資源:
  public MessageResources getResources()
  檢查用戶是否點擊表單上的“取消”鍵,假如是,將返回true:
  public Boolean isCancelled(HttpServletRequest request)
  當應用程序發生錯誤時,Action類能夠使用下面方法存儲錯誤信息:
  public void saveErrors(HttpServletRequest request,ActionErrors errors)
  ActionError實例被用來存儲錯誤信息,這個方法在錯誤要害字下的請求屬性列表中存儲ActionError對象。通過使用在struts標記庫中定義的自定義標記,JSP頁能夠顯示這些錯誤信息,稍後我們就介紹。
  
  3.5 ActionForm類
  框架假設用戶在應用程序中為每個表單都創建了一個ActionForm bean,對於每個在struts-config.xml文件中定義的bean,框架在調用Action類的perform()方法之前會進行以下操作:
  在相關聯的要害字下, 它檢查用於適當類的bean實例的用戶會話, 假如在會話中沒有可用的bean, 它就會自動創建一個新的bean並添加到用戶的會話中。
  對於請求中每個與bean屬性名 稱對應的參數, Action調用相應的設置方法。
  當Action perform()被調用時, 最新的ActionForm bean傳送給它, 參數值就可以立即使用了。
  ActionForm類擴展org.apache.struts.action.ActionForm類,程序開發人員創建的bean能夠包含額外的屬性,而且ActionServlet可能使用反射(答應從已加載的對象中回收信息)訪問它。
  ActionForm類提供了另一種處理錯誤的手段,提供兩個方法:
  Public ActionErrors validate(ActionMappin mapping,
  ServletRequest request)
  Public ActionErrors validate(ActionMappin mapping,
  HttpServletRequest request)
  你應該在自己的bean裡覆蓋validate()方法,並在配置文件裡設置<action>元素的validate為true。在ActionServlet調用Action類前,它會調用validate(),假如返回的ActionErrors不是null,則ActinForm會根據錯誤要害字將ActionErrors存儲在請求屬性列表中。
  假如返回的不是null,而且長度大於0,則根據錯誤要害字將實例存儲在請求的屬性列表中,然後ActionServlet將響應轉發到配置文件<action>元素的input屬性所指向的目標。
  假如需要執行特定的數據有效性檢查,最好在Action類中進行這個操作,而不是在ActionForm類中進行。
  方法reset()可將bean的屬性恢復到默認值:
  public void reset(ActionMapping mapping,HttpServletRequest request)
  public void reset(ActionMapping mapping,ServletRequest request)
  典型的ActionFrom bean只有屬性的設置與讀取方法(getXXX),而沒有實現事務邏輯的方法。只有簡單的輸入檢查邏輯,使用的目的是為了存儲用戶在相關表單中輸入的最新數據,以便可以將同一網頁進行再生,同時提供一組錯誤信息,這樣就可以讓用戶修改不正確的輸入數據。而真正對數據有效性進行檢查的是Action類或適當的事務邏輯bean。
  
  3.6 ActionForward類
  目的是控制器將Action類的處理結果轉發至目的地。
  Action類獲得ActionForward實例的句柄,然後可用三種方法返回到ActionServlet,所以我們可以這樣使用findForward():
  ActionServlet根據名 稱獲取一個全局轉發
  ActionMapping實例被傳送到perform()方法, 並根據名 稱找到一個本地轉發
  另一種是調用下面的一個構造器來創建它們自己的一個實例:
  public ActionForward()
  public ActionForward(String path)
  public ActionForward(String path,Boolean redirect)
  
  3.7 錯誤處理
  struts提供了兩個類來處理錯誤:ActionErrors和ActionError,它們都擴展org.apache.struts.action。ActionErrors保存著ActionError對象的集合,其中每一個代表了獨立的錯誤信息。每個ActionError都包含了要害字,能夠映射到資源文件中存儲的錯誤信息,而這個資源文件是在ActionServlet初始化參數中指定的。
  ActionError類
  ActionError類定義了一組重載的構造器來創建錯誤信息,第一個構造器方法使用一個字符串作為參數,例如:
  ActionError error = new ActionError(“error.Invalid”);
  實例error映射到應用程序資源文件中的一個錯誤消息:
  error.invalid=<b>Invalid Number</b>
  假如在JSP頁使用<html:error>,用戶就會看見加粗的Invalid Number。
  另一種使用了java.text.MessageFormat類,可在消息中指定替換字符串,例如:
  error.invalid=<b>Invalid Number{0}</b>
  創建一個錯誤消息:
  ActionError error = new ActionError(‘error.invalid’,new Double(-1));
  JSP頁顯示:Invalild Number -1
  還有獲得特定消息的錯誤要害字:
  public String getKey()
  還有獲得替換字符串數組:
  public String[] getValues()
  
  ActionError類
  ActionError類從不獨立進行錯誤處理,它們總是被存儲在ActionErrors對象中。ActionErrors對象保存ActionError類的集合以及它們特定的屬性值,我們可以使用自己定義的屬性值,或是使用ActionErrors.GLOBAL_ERROR.
  下面是典型Action類的perform()中錯誤處理情況:
  MyForm form = (MyForm) form;
  if (number == -1) {
  ActionErrors errors = new ActionErrors();
  ActionError error = new ActionError(“error.Invalid”,new Double(-1));
  errors.add(ActionErrors.GLOBAL_ERROR,error);
  saveErrors(req,errors);
  String input = mapping.getInput();
  Return new ActionForward(input);
  }
  ActionErrors有如下有用方法:
  方法 描述
  clear() 清除所有錯誤信息
  empty() 假如ActionErrors對象是空的,它返回true
  get() 返回錯誤信息。若無參數,所有信息將作為一個Iterator對象返回
  properties() 返回包含屬性名稱的Iterator,這些屬性至少有一個錯誤
  size() 返回錯誤的數目(整型數)
  
  Struts標記庫
  4.Struts標記庫
  JSP視窗組件所使用的 struts標記庫由四類標記組成:
  Bean標 記:用來在JSP頁中治理bean
  邏輯標 記:用來在JSP頁中控制流程
  HTML標 記:用來生成HTML標 記, 在表單中顯示數據, 使用會話ID對URL進行編程
  模板標 記:使用動態模板構造普通格式的頁
  4.1 Bean標記
  這個標記庫中包含用於定義新bean、訪問bean及其屬性的標記。Struts框架提供了多種自定義標記用來在JSP頁中處理JavaBean。這些標記被封裝在一個普通的標記庫中,在文件struts-bean.tld中定義了它的標記庫描述器。Bean標記庫將標記定義在四個子類別中:
  創建和復 制bean的標 記
  腳本變量定義標 記
  bean翻譯標 記
  消息國際化標 記
  4.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
  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”/>
  4.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或字符串類型的頁作用域屬性。假如在檢索資源時發生問題,就會產生一個請求時間異常。屬性如下:
  屬性 描述
  Id 腳本變量和要定義的頁作用域屬性的名稱
  Name 資源的相對路徑
  Input 假如這個屬性不存在,資源的類型就是字符串
  例如:
  <bean:resource id=”myResource” name=”/WEB-INF/images/myResource.xml”/>
  腳本變量的名稱是myResource,要檢索的資源的名稱是myResource.xml。
  
  4.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非凡字符都將被轉化為相應的實體引用。
  
  4.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-INFclasses目錄中,文件名是ApplicationResources.properties,那麼需要傳遞的參數值是ApplicationResources。假如文件在WEB-INFclassescom est中,那麼參數值就應該是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
  
  4.2 邏輯標記
  邏輯庫的標記能夠用來處理外觀邏輯而不需要使用scriptlet。Struts邏輯標簽庫包含的標記能夠有條件地產生輸出文本,在對象集合中循環從而重復地產生輸出文本,以及應用程序流程控制。它也提供了一組在JSP頁中處理流程控制的標記。這些標記封裝在文件名為struts-logic.tld的標記包中。邏輯標記庫定義的標記能夠執行下列三個功能:
  條件邏輯
  重復
  轉發/重定向響應
  4.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>
  它們的功能是在計算標記體之前判定特定的項目是否存在。標記的屬性和屬性值決定了要進行檢查的項目。
  屬性 描述
  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”)。
  4.2.2 重復標記
  在邏輯標記庫中定義了<logic:iterate>標記,它能夠根據特定集合中元素的數目對標記體的內容進行重復的檢查。集合的類型可以是java.util.Iterator,java.util.Collection,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。
  4.2.3 轉發和重定向標記
  轉發標記
  <logic:forward>標記能夠將響應轉發給重定向到特定的全局ActionForward上。ActionForward的類型決定了是使用PageContext轉發響應,還是使用sendRedirect將響應進行重定向。此標記只有一個”name”屬性,用來指定全局ActionForward的名稱,例如:
  <logic:forward name=”myGlobalForward”/>
  重定向標記
  <logic:redirect>標記是一個能夠執行HTTP重定向的強大工具。根據指定的不同屬性,它能夠通過不同的方式實現重定向。它還答應開發人員指定重定向URL的查詢參數。屬性如下:
  屬性 描述
  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中的一個屬性,以便標明將響應重定向到哪個資源。
  4.3 HTML標記
  Struts HTML標記可以大致地分為以下幾個功能:
  顯示表單元素和輸入控件
  顯示錯誤信息
  顯示其他HTML元素
  4.3.1 顯示表單元素和輸入控件
  struts將HTML表單與為表單操作而定義的ActionForm bean緊密聯系在一起。表單輸入字段的名稱與ActionForm bean裡定義的屬性名稱是對應的。當第一次顯示表單時,表單的輸入字段是從ActionForm bean中移植過來的,當表單被提交時,請求參數將移植到ActionForm bean實例。
  所有可以在<form>標記中使用的用來顯示HTML輸入控件的內嵌標記都使用下列屬性來定義javascript事件處理器。
  屬性 描述
  Onblur 字段失去了焦點
  Onchange 字段失去了焦點並且數值被更改了
  Onclick 字段被鼠標點擊
  Ondblclick 字段被鼠標雙擊
  Onfocus 字段接收到輸入焦點
  Onkeydown 字段擁有焦點並且有鍵按下
  onkeypress 字段擁有焦點並且有鍵按下並釋放
  Onkeyup 字段擁有焦點並且有鍵被釋放
  onmousedown 鼠標指針指向字段並且點擊
  onmousemove 鼠標指針指向字段並且在字段內移動
  onmouseout 鼠標指針指向控件,但是指針在元素外圍移動
  onmouseover 鼠標指針沒有指向字段,但是指針在元素內部移動
  Onmouseup 鼠標指針指向字段,並且釋放了鼠標按鍵
  <form>元素中能夠被定義的其他一般屬性有:
  屬性 描述
  Accesskey 定義訪問輸入字段的快捷鍵
  Style 定義輸入字段的樣式
  styleClass 定義輸入字段的樣式表類
  Tabindex 輸入字段的tab順序
  表單標記
  <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中檢索得到的:
  <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>標記裡
  按鈕和取消標記
  <html:button>標記顯示一個按鈕控件;<html:cancel>標記顯示一個取消按鈕。屬性如下:
  屬性 描述
  Property 定義在表單被提交時返回到服務器的請求參數的名稱
  Value 按鈕上的標記
  復位和提交標記
  <html:reset>和<html:submit>標記分別能夠顯示HTML復位按鈕和提交按鈕。
  文本和文本區標記
  <html:text>和<html:textarea>標記分別為HTML文本框和文本區,屬性如下:
  屬性 描述
  Property 定義當表單被提交時送回到服務器的請求參數的名稱,或用來確定文本元素當前值的bean的屬性名稱
  Name 屬性被查詢的bean的名稱,它決定了文本框和文本區的值。假如沒有設置,將使用與這個內嵌表單相關的ActionForm的名稱
  <html:text>標記還有以下屬性:
  屬性 描述
  Maxlength 能夠輸入的最大字符數
  Size 文本框的大小(字符數)
  <html:textarea>標記特有的屬性如下:
  屬性 描述
  Rows 文本區的行數
  Cols 文本區的列數
  檢查框和復選框標記
  <html:checkbox>標記能夠顯示檢查框控件。<html:multibox>標記能夠顯示HTML復選框控件,請求對象在傳遞檢查框名稱時使用的getParameterValues()調用將返回一個字符串數組。屬性如下:
  屬性 描述
  Name Bean的名稱,其屬性會被用來確定檢查是否以選中的狀態顯示。假如沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。
  Property 檢查框的名稱,也是決定檢查框是否以選中的狀態顯示的bean屬性名稱。在復選框的情況下,這個屬性必須是一個數組。
  Value 當檢查框被選中時返回到服務器的請求參數的值
  例如:
  <html:checkbox property=”married” value=”Y”/>
  一個名為married的檢查框,在表單提交時會返回一個”Y”.
  文件標記
  <html:file>標記可以顯示HTML文件控件。屬性如下:
  屬性 描述
  Name Bean的名稱,它的屬性將確定文件控件中顯示的內容。假如沒設置,將使用與內嵌表單相關的ActionForm bean的名稱
  property 這個屬性定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來確定文件控件中顯示內容的bean屬性名稱
  Accept 服務器能夠處理的內容類型集。它也將對客戶浏覽器對話框中的可選文件類型進行過濾
  Value 按鈕上的標記,這個按鈕能夠在本地文件系統中浏覽文件
  單選鈕標記
  <html:radio>標記用來顯示HTML單選鈕控件,屬性如下:
  屬性 描述
  Name Bean的名稱,其屬性會被用來確定單選鈕是否以選中的狀態顯示。假如沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。
  property 當表單被提交時送回到服務器的請求參數的名稱,以及用來確定單選鈕是否以被選中狀態進行顯示的bean屬性的名稱
  Value 當單選鈕被選中時返回到服務器的值
  隱藏標記
  <html:hidden>標記能夠顯示HTML隱藏輸入元素,屬性如下:
  屬性 描述
  Name Bean的名稱,其屬性會被用來確定隱藏元素的當前值。假如沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。
  property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來確定隱藏元素當前值的bean屬性的名稱
  Value 用來初始化隱藏輸入元素的值
  密碼標記
  <html:password>標記能夠顯示HTML密碼控件,屬性如下:
  屬性 描述
  maxlength 能夠輸入的最大字符數
  Name Bean的名稱,它的屬性將用來確定密碼元素的當前值。假如沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。
  property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來確定密碼元素當前值的bean屬性的名稱
  redisplay 在顯示這個字段時,假如相應的bean屬性已經被設置了數據,這個屬性決定了是否顯示密碼的內容
  Size 字段的大小
  選擇標記
  <html:select>標記能夠顯示HTML選擇控件,屬性如下:
  屬性 描述
  multiple 表明這個選擇控件是否答應進行多選
  Name Bean的名稱,它的屬性確定了哪個。假如沒有設置,將使用與這個內嵌表單相關的ActionFrom bean的名稱。
  property 定義了當表單被提交時送回到服務器的請求參數的名稱,以及用來確定哪個選項需要被選中的bean屬性的名稱
  Size 能夠同時顯示的選項數目
  Value 用來表明需要被選中的選項
  選項標記(這個元素需要嵌套在<html:select>標記裡)
  <html:option>標記用來顯示HTML選項元素集合,屬性如下:
  屬性 描述
  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,它也是一個字符串集合,能夠用來寫入選項的標志。
  4.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
  Name 表示請求屬性的名稱,它存儲著ActionErrors對象。其默認值是Action.ERROR_KEY
  property 這個屬性指定了ActionErrors對象中存儲每個獨立ActionError對象的要害字,它可以過濾消息
  例子:
  <html:errors/>
  顯示集合中所有的錯誤。
  <html:errors property=”missing.name”/>
  顯示存儲在missing.name要害字的錯誤。
  4.3.3 其他HTML標記
  struts HTML標記還定義了下列標記來顯示其他HTML元素:
  <html:html> : 顯示HTML元素
  <html:img> : 顯示圖象標 記
  <html:link> : 顯示HTML鏈接或錨點
  <html:rewrite> : 創建沒有錨點標 記的URL
  這些標記的具體內容請參照struts文檔。
  ?! 索引?目?。動態模板是模塊化WEB頁布局設計的強大手段。Struts模板標記庫定義了自定義標記來實現動態模板。
  插入標記
  <template:insert>標記能夠在應用程序的JSP頁中插入動態模板。這個標記只有一個template屬性,用來定義模板JSP頁。要插入到模板的頁是有多個<template:put>標記來指定的,而這些標記被定義為<template:insert>標記的主體內容。
  放置標記
  <template:put>標記是<template:insert>標記內部使用的,用來指定插入到模板的資源。屬性如下:
  屬性 描述
  content 定義要插入的內容,比如一個JSP文件或一個HTML文件
  direct 假如這個設置為true,由content屬性指定的內容將直接顯示在JSP上而不是作為包含文件
  Name 要插入的內容的名稱
  Role 假如設置了這個屬性,只有在當前合法用戶具有特定角色時才能進行內容的插入。
  獲得標記
  在模板JSP頁中使用<template:get>標記能夠檢索由<template:put>標記插入到JSP頁的資源。屬性如下:
  屬性 描述
  Name 由<template:put>標記插入的內容的名稱
  Role 假如設置了這個屬性,只有在當前合法用戶具有特定角色時才能進行內容的檢索
  使用模板標記
  首先編寫一個模板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”/>
  <template:put name=”content” content=”employeeList.jsp”/>
  <template:put name=”footer” content=”footer.html”/>
  </template:insert>
  這個應用程序JSP頁使用<template:insert標記來定義模板,然後使用<template:put>標記將特定內容名稱指定的資源放到模板JSP頁中。假如我們有上百個布局相同的頁,但忽然想改變這個模板,我們只需要改變template.jsp文件。
  
  待續 <
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved