2016-10-28 133 views
0

我正在將struts2(核心)從2.1.8.1升級到2.3.31,並存在以下問題:升級所有jar,編譯應用程序,運行應用程序並訪問該頁面後,我得到以下錯誤:Struts2選擇標籤:required vs. required標籤

java.lang.NoSuchMethodError: org/apache/struts2/views/jsp/ui/SelectTag.setRequired(Ljava/lang/String;)V

所以我做一個小小的挖掘並發現了以下報告:Source compatibility report for the struts2-core library between 2.3.8 and 2.3.12 versions
基本上表明:

  1. AbstractUITag.setRequiredLabel (String requiredLabel) : void - 增加。

  2. AbstractUITag.setRequired (String required) : void - 除去

現在,docs對於選擇元素,提及以下,即requiredLabel被定義爲如果設置爲true,渲染元素將指示輸入所需的鍵入布爾值。

所以,我有點迷失在這裏,我應該使用requiredLabel=true還是隻刪除required屬性並在代碼中驗證?

回答

2

requiredLabel屬性將生成一個*以可視化呈現該字段是必需的。

The attribute was called required in old versions of the tags,但隨後HTML5規範與required屬性一起出來,它與星號無關,而是指示瀏覽器不允許提交帶有空字段的表單,因此新版本的標籤必須改變它以便可以使用HTML5版本,同時保持星號功能可用,使用另一個名稱:requiredLabel

你只需要操作是:

find every occurrence of required="true" , replace it with requiredLabel="true" .

建議操作:

find every occurrence of required="true" ,

replace it with requiredLabel="true" required="required"

,所以你會得到兩全其美的。

也注意無用,但可能存在required="false"發行貨幣。

+0

非常感謝您的解釋,我現在明白了。只有一點評論 - 在struts 2.3中沒有屬性「必需」,所以設置仍然失敗。 – urir

+0

由於[動態屬性](http://stackoverflow.com/a/17821833/1654265),它不會失敗。隨時upvote :) –

-1

setRequiredLabel似乎與setRequired具有相同的方法簽名,保存方法名稱。考慮到手動編寫驗證代碼可能需要更多時間並且可能比使用setRequiredLabel效率低,因此使用setRequiredLabel而不是重新創建輪子可能是一個不錯的選擇。

考慮此代碼對代碼中可能使用setRequired的其他區域的影響也是值得的,並且儘可能保持類之間的一致性。