错误是:
java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [userRegisterAction]
org.apache.struts2.convention.ConventionsServiceImpl.determineResultPath(ConventionsServiceImpl.java:100)
org.apache.struts2.convention.ConventionUnknownHandler.determinePath(ConventionUnknownHandler.java:385)
org.apache.struts2.convention.ConventionUnknownHandler.handleUnknownResult(ConventionUnknownHandler.java:274)
com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownResult(DefaultUnknownHandlerManager.java:76)
com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:215)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:356)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilte
UserRegister.jsp
<s:form action="UserRegisterAction">
  <s:textfield name="custorm.name" label="姓名" required="true"/>
  <s:password name="custorm.password" label="密码" required="true"/>
  <s:submit value="注册"/>
  <s:reset value="重填"/>
  </s:form>
UserRegisterAction.java
private Custorm custorm;
private ServiceDao serviceDao;
public Custorm getCustorm() {
return custorm;
}
public void setCustorm(Custorm custorm) {
this.custorm = custorm;
}
public ServiceDao getServiceDao() {
return serviceDao;
}
public void setServiceDao(ServiceDao serviceDao) {
this.serviceDao = serviceDao;
}public String execute() throws Exception{
this.serviceDao.saveCustorm(this.custorm);
return SUCCESS;

}
用了struts的验证框架
UserRegsiterAction-validation.xml
<validators>
<field name="custorm">
<field-validator type="visitor">
<param name="context">user</param>
<param name="appendPrefix">true</param>
<message>用户的</message>
</field-validator>
</field>
</validators>
Custorm-user-validaton.xml
<validators>
 <field name="name">
 <field-validator type="requiredstring">
 <message>用户名不能为空</message>
</field-validator>
 </field>
 <field name="password" >
 <field-validator type="requiredstring">
 <message>密码不能为空</message>
 </field-validator>
 </field> 
 </validators>
当我点击注册时 就出现了这个情况 按理说应该是xx不能为空之类的 是什么原因呢?

解决方案 »

  1.   

    userRegisterAction  检查这个类在spring中的配置
      

  2.   

    struts.xml
    <action name="UserRegisterAction" class="userRegisterAction">
    <result>/success.jsp</result>
    </action>
    appligcationContext.xml
    <bean name="userRegisterAction" class="action.UserRegisterAction" scope="prototype"> <property name="serviceDao" ref="serviceDao"/></bean>
    没有什么问题
      

  3.   

    你的struts和spring没有整合好吧
      

  4.   

    <action name="UserRegisterAction" class="userRegisterAction">
    <result>/success.jsp</result>
    </action>是不是你写反了啊??
    <action name="userRegisterAction" class="UserRegisterAction">
    <result>/success.jsp</result>
    </action>
      

  5.   

    注意大小写,页面上的action跟struts的action一致,struts的class跟spring的bean一致
      

  6.   

    <action   name= "UserRegisterAction "   class= "userRegisterAction "> 
    Are u sure that?
    写反了吧哥们!~~你的类名是小写的?????
      

  7.   

    的确没错呀 <s:form action="UserRegisterAction"><action name="UserRegisterAction" class="userRegisterAction">
    <bean name="userRegisterAction" class="action.UserRegisterAction" scope="prototype">
      

  8.   

    楼主排查以下二个可能会出现问题的地方:
    1、struts配置文件需要加入<constant name="struts.objectFactory" value="spring"/>
    2、web.xml需要启动spring <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
      

  9.   

     WEB.XML:
    <filter>
       <filter-name>struts2</filter-name>
       <filter-class>
       org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
       </filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/applicationContext.xml</param-value>
     </context-param>
     <listener>    
            <listener-class >    
                org.springframework.web.context.ContextLoaderListener    
    </listener-class>
        </listener>
    11楼得我看了 都有
      

  10.   

    <action name="UserRegisterAction" class="userRegisterAction">
    <result name="success">/success.jsp</result>
    </action>加上这个属性试下吧,我查了下代码好像与spring集成时需要这个
      

  11.   

    userRegisterAction 的类名没写对
      

  12.   

    应该是找到根本原因了
    你的validation验证没有通过,返回input它却没有找到相应的input result 会偿试着用ACTION的class去新建一个对象所以报错了,就是你没有入口路径。。
      

  13.   

    问题解决了 15楼真是一语中的 的确 我没有配置input 的结果 散分了。。
      

  14.   

    <s:form action="UserRegisterAction">
      <s:textfield name="custorm.name" label="姓名" required="true"/>
      <s:password name="custorm.password" label="密码" required="true"/>
      <s:submit value="注册"/>
      <s:reset value="重填"/>
      </s:form>改为
    <s:form action="/UserRegisterAction">
      <s:textfield name="custorm.name" label="姓名" required="true"/>
      <s:password name="custorm.password" label="密码" required="true"/>
      <s:submit value="注册"/>
      <s:reset value="重填"/>
      </s:form>
      

  15.   

    15楼的高手,你可不可以说详细一点啊,我就没有validation验证啊 
      

  16.   

    咋一看,还以为没有这个类呢,但是命名存在,其实真正原因是没有合适的result name,这错误误导得可真离谱啊 忘记添加对应的result name了。当添加完毕,一切欧了。
     
      

  17.   

    补充一下,Action页面如果返回的是大写“SUCCESS”或者“INPUT”,在Struts.xml中的result的name属性一定是大写的。如果小写就配置小写。如果不匹配也会导致上面的错误发生。这是我今天刚刚遇到的错误,提出来与大家分享。
      

  18.   

    15楼的高手,你可不可以说详细一点啊,我就没有validation验证啊  
      

  19.   

    我的没用struts标签也这样
    好像还有其他有问题,请高手们赐教
      

  20.   

    我发现问题了
    1,隐藏域  value=空
    2,上传的文件时 忘了加enctype="multipart/form-data"看看说不定有帮助
      

  21.   

    ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed
    java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132)
    at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)
    at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:507)
    at com.opensymphony.xwork2.inject.ContainerImpl$8.call(ContainerImpl.java:540)
    at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574)
    at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:538)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:213)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
    at o
      

  22.   

    java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132)
    at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)
    at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:507)
    at com.opensymphony.xwork2.inject.ContainerImpl$8.call(ContainerImpl.java:540)
    at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574)
    at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:538)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:213)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4656)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5309)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)