一.问题显示: java.lang.ClassNotFoundException: cn.soft.action_method.emAction
Unable to instantiate Action, cn.soft.action_method.emAction, defined for 'em_save' in namespace '/'cn.soft.action_method.emAction
二.Stacktraces:堆栈追踪
Stacktrace(堆栈跟踪)是一个非常有用的调试工具. 在未捕获的异常被抛出时(或者手动制造堆栈跟踪的时候)它让你看到你调到的堆(意思是,在某一点调用方法的堆). 不仅显示出出现错误的地方, 也显出程序在那个地方是如何结束的.
三.我这里出现的问题是:Action 配置出错了
cn.soft.action_method.emAction这个找不到,而我之前在项目里有一个包,也用过通配符
<action name="*_*" class="cn.soft.action_method.{1}Action"
method="{2}"
所以后来配置另一个文件的通配符,运行时em_save,和之前的配置发生了冲突,找不到emAction,运行struts.xml是有顺序的
<package name="validationPkg" extends="struts-default" namespace="/">
<action name="em_*" class="cn.soft.validation.RegisterAction"
method="{1}"/>
以后为避免这种情况,通配符不要使用在Action名字的位置,方法的位置就好
四.出现这个问题的原因主要有两个
1、如果项目没有使用Spring,则struts.xml配置文件中,这个action的class属性的路径没有写完整,应该是包名.类名
2、如果项目使用了Spring,那就是applicationContext.xml里面没有为这个action定义bean。这样strus.xml中的对应action的class属性的值就是Spring配置文件中bean的id,比如:
applicationContext.xml
<bean id="adminAction" class="go.derek.action.AdminAction"
scope="prototype">
</bean>
struts.xml
<action name="admin" class="adminAction" method="execute">
<result>/admin.jsp</result>
</action>
原文:https://blog.youkuaiyun.com/exceptional_derek/article/details/25735457