Struts2中Action動態呼叫DMI出現的一個問題

BeatificCat發表於2018-03-16

      在學習struts.xml檔案關鍵元素分析的時候,在測試Action的動態呼叫例子時,在開發者介面出現了一個沒有對映到名稱空間的錯誤,搜尋了幾篇文章,大多數都是對struts.xml檔案命名是否出錯,路徑是否正確等這些的確認(比如struts.xml檔案要在src目錄下,還有一個是更改eclipse web 專案預設編譯輸出路徑到WEB-INF下),但是發現自己的專案工程中並未出現這種錯誤。

      最後發現,我用的struts2版本為2.3.34,在Struts2.3.x或更高的某些版本時出現There is no Action mapped for namespace [/user] and action name [user!add] associated with context path錯誤,原因有兩個:一是DMI可能導致安全問題;二是DMI與萬用字元方法功能有重疊,因此該版本Struts2預設關閉DMI。

      那解決方法只需要在struts.xml中加一句<constant name="struts.enable.DynamicMethodInvocation" value="true" /> 來開啟動態方法呼叫。

      動態方法呼叫官方推薦的做法是,使用萬用字元的形式。不要使用actionName!methodName的方式。


    這裡感謝一下hrhacmer的總結文章:http://blog.csdn.net/roney_win/article/details/46575205

相關文章