在学习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