Struts1.2.4
新特征
主要修改:
不贊成特征
Struts1.1中已經(jīng)有很多構(gòu)造不再贊成使用。許多已經(jīng)被刪除了。所以在升級(jí)到1.2.4時(shí),請(qǐng)clean-compile 你的應(yīng)用,并且使deprecation warnings 被打開(kāi)。在升級(jí)到1.2.4之前強(qiáng)烈建議解決所有decprecated 的用法。最可能應(yīng)用開(kāi)發(fā)人員的用法是:
- org.apache.struts.Action statics: 如今使用org.apache.struts.Global statics
- Action.perform: 如今使用Action.execute
雖然沒(méi)有被刪除也沒(méi)有被標(biāo)明為不贊成使用,最好還是將ActionErrors 替換為ActionMessages 以確保正確的操作。
TagUtils 和ModuleUtils
許多以前在org.apache.struts.utils.RequestUtils中找到的工具方法如今移動(dòng)到了org.apache.struts.taglibs.TagUtils 或org.apache.struts.utils.ModuleUtils包中。
GenericDataSource / GenericConnection 實(shí)現(xiàn)被刪除
datasources manager 仍然支持,但是我們自己的datasource implementationis 并不被支持。很歡迎你插入自己的DataSource 實(shí)現(xiàn),但是我們沒(méi)有資源來(lái)維護(hù)我們自己的實(shí)現(xiàn)。如果你的容器不支持DataSource實(shí)現(xiàn),推薦使用Jakarta Commons的 DBCP package。
Validator 增強(qiáng)
- ValidWhen
Struts Validator 如今支持ValidWhen 規(guī)則,以便一個(gè)驗(yàn)證可以依賴于另一個(gè)驗(yàn)證。
- IntRange 現(xiàn)在可以檢測(cè)select-one 和radio 字段。比如:這使得我們可以使用一些有效的選項(xiàng)加上一個(gè)具有諸如"Choose one" 標(biāo)題并且值為"-1"的附加選項(xiàng)來(lái)組裝一個(gè)組合框。那么當(dāng)用戶試圖提交一個(gè)表單時(shí),你可以檢測(cè)值是否為-1,從而決定是否沒(méi)有選擇選項(xiàng)。
- 你現(xiàn)在可以強(qiáng)制進(jìn)行客戶端Javascript 驗(yàn)證來(lái)檢測(cè)所有約束,而不是停留在第一個(gè)錯(cuò)誤之處。方法是設(shè)置Validator PlugIn上的一個(gè)新的屬性stopOnFirstError為false。
- "required" 驗(yàn)證現(xiàn)在可以檢測(cè)checkboxes, radio,select-one, 和 select-multiple 字段類(lèi)型。參見(jiàn)修改后的Validator 示例來(lái)看如何使用這些新的特征。
- 一個(gè)標(biāo)準(zhǔn)的validateUrl 規(guī)則可以讓你能夠檢測(cè)某一個(gè)屬性是否包含一個(gè)格式正確的URL。
DigestingPlugIn
一個(gè)新的標(biāo)準(zhǔn)PlugIn 可以幫助你在application范圍內(nèi)創(chuàng)建你自己的對(duì)象圖(object graph)。這是創(chuàng)建供Action調(diào)用的業(yè)務(wù)對(duì)象的快捷方式。請(qǐng)參見(jiàn)最新的MailReader 示例來(lái)看如何使用DigestingPlugin。
ModuleConfigVerifier
雖然不是全新的,一個(gè)標(biāo)準(zhǔn)類(lèi),用來(lái)驗(yàn)證模塊配置,位于PlugIn 包。ModuleConfigVerifier 主要確認(rèn)Struts對(duì)象圖的各中組件被載入。但是,開(kāi)發(fā)人員可擴(kuò)展此類(lèi)來(lái)檢查確保Struts 配置文件的內(nèi)部一致性。
提供了支持Maven的項(xiàng)目文件.
新的配置DTD
推薦使用struts-config_1_2.dtd。新的DTD 添加了兩個(gè)新的元素<display-name> 和 <description> 到struts-config 元素中。這些元素可用于struts配置文件工具和文檔產(chǎn)生工具。在Struts 1.2.x 中,已有的Struts 配置文件可以使用兩個(gè)版本的DTD 都可載入。
新的Taglib URIs
標(biāo)簽庫(kù)的URI已經(jīng)被修改已反映Struts從Jakarta 移到了Apache 的頂級(jí)項(xiàng)目。為了兼容,使用舊的URI的TLD仍然有效,但是鼓勵(lì)使用新的URI。
Struts-Chain
試驗(yàn)性的,這個(gè)新的"contrib" package 使用了Jakarta Sandbox中的Responsibilty package 的Chainin 來(lái)創(chuàng)建一個(gè)新的RequestProcessor的Breed。未來(lái)版本可能會(huì)成為默認(rèn)實(shí)現(xiàn)。.
MappingDispatchAction
一個(gè)新的標(biāo)準(zhǔn)Action,將控制轉(zhuǎn)發(fā)到ActionMapping 參數(shù)命名的一個(gè)方法。
Cancel handlers
DispatchAction, LookupDispatchAction, 和 MappingDispatchAction ,如今提供了默認(rèn)的可以覆寫(xiě)的cancel handler。也可以指定默認(rèn)的handler name。
Session-scoped ActionMessages
現(xiàn)在你可以將ActionMessages 保存在session 中and have them cleaned up after the first use。現(xiàn)在除了Action.saveMessages() 將消息保存在session中還有了另外一種選擇。在消息已經(jīng)被訪問(wèn)過(guò)一次之后ActionMessages.isAccessed() 返回true。RequestProcessor.processCachedMessages() 查詢isAccessed() 已決定是否應(yīng)該將消息從session中刪除。
JA Mailreader
Struts Mailreader Example 應(yīng)用現(xiàn)在包含Japanese 資源文件。
Tiles EL
Tiles tags 如今可以通過(guò)Struts EL taglib使用EL,后者基于JSTL。
Wildcard Mappings
現(xiàn)在可以在actiponMapping中使用通配符。詳細(xì)信息參見(jiàn)Struts Mailreader Example application。
Action attributes
html img tag 添加了Action 屬性,以匹配html link tag。
Module attribute
Forward元素以及多個(gè)核心標(biāo)簽中新增一個(gè)"module" 屬性。這個(gè)屬性允許你通過(guò)名稱(chēng)(或者前綴)指定另一個(gè)模塊來(lái)創(chuàng)建模塊間的直接鏈接。新的module 屬性優(yōu)于contextRelative屬性,并且可以常用于"SwitchAction"中。
Struts 1.2.7
主要修改
依賴性
Struts 對(duì)下列組件的依賴性發(fā)生了改變:
依賴性 |
新的版本 |
Commons BeanUtils |
Version 1.7.0 |
Commons Digester |
Version 1.6 |
Commons Validator |
Version 1.1.4 |
Commons Collections |
removed |
Commons Lang |
removed |
Core Struts
Saving Messages in the Session
在action也新增了一個(gè)方法[saveErrors(HttpSession, ActionMessages)]來(lái)將errors 保存在Session 中,并且在其第一次被訪問(wèn)之后被自動(dòng)從Session中刪除。這是等同于1.2.4 中message上新增的功能。
Re-directing ActionForward
ActionRedirect 是ActionForward 的一個(gè)子類(lèi),其設(shè)計(jì)來(lái)用于重定向請(qǐng)求,支持在運(yùn)行時(shí)添加參數(shù)。
Download Action
DownloadAction 是一個(gè)提供了下載文件的具體細(xì)節(jié)的抽象Action。
Dispatch Helper
ActionDispatcher 是一個(gè)提供DispatchAction 類(lèi)型的行為但是不必繼承自DispatchAction。
Lazy Validator Form
DynaBean 風(fēng)格的ActionForm,它不需要其屬性被定義,并提供Lazy List 和Lazy Map 行為。
jars 中的配置文件
配置文件(如. Struts config, Validator config 和 Tiles 配置文件)現(xiàn)在可以被保存在jars。Struts 會(huì)像以前一樣檢查servlet context,但是如果沒(méi)找到, Struts 會(huì)嘗試classloader 去查找。
Tag Library 改變
Highlighting Errors
Struts現(xiàn)在可以使用HTML Input Tags上的 errorKey, errorStyle, errorStyleClass 和 errorStyleId 屬性自動(dòng)高亮錯(cuò)誤字段。
Readonly / Disabled Forms
現(xiàn)在可以使用<html:form> tag的readonly 和disabled屬性來(lái)禁止或者使全部的字段只讀。
N.B. readonly 屬性只影響<html:text>, <html:textarea> 和 <html:password> as per the HTML 4 specification。
HTML Tag Refactoring
許多HTML標(biāo)簽都被重構(gòu)了,以便更易使用。
- 添加了prepareOtherAttributes() 方法- 剛好在關(guān)閉元素之前調(diào)用,提供一個(gè)地方來(lái)渲染額外的屬性。
- name 屬性渲染如今在prepareName() 方法中,以便更易提供定制行為。
- value 屬性如今在prepareValue() 方法中以便更易提供定制行為。
- 當(dāng)渲染一個(gè)屬性時(shí),這些標(biāo)簽現(xiàn)在使用屬性的getter 而不是直接使用實(shí)際的屬性,這意味著如果你想,比如覆蓋TextTag的 styleClass ,那么一個(gè)選擇是覆蓋getStyleClass()方法。
- 屬性的渲染現(xiàn)在使用一個(gè)簡(jiǎn)單的 prepareAttribute() 方法來(lái)產(chǎn)生name="attribute" 格式,使多數(shù)屬性渲染一個(gè)一行語(yǔ)句。
Bundle Attribute
bundle 屬性被添加到了下列標(biāo)簽:ButtonTag, CancelTag, CheckboxTag, FileTag, FrameTag, HiddenTag, LinkTag, MultiboxTag, PasswordTag, RadioTag, ResetTag, SelectTag, SubmitTag, TextTag, TextareaTag。
ErrorTag
現(xiàn)在新增了header, footer, prefix, suffix屬性。
Validator
Resource Bundle Support
Validator 配置文件中(e.g. validation.xml)的<msg> 和 <arg> 元素的bundle 屬性現(xiàn)在隨同<msg> 的resource 屬性一起得到支持。
struts-examples webapp 中添加了新的頁(yè)面來(lái)展示對(duì)Resource Bundle 的支持。
Struts1.2.8
主要改變
Struts 1.2.8 的主要改變是修正了Cross Site Scripting (XSS) 弱點(diǎn)。