struts2 文件上传显示进度条报错

2013-5-9 15:53:09 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.LocaleProvider, name='default'] in public void com.nova.core.DaisyMultiPartRequest.setLocaleProvider(com.opensymphony.xwork2.LocaleProvider).
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:144)
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:113)
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:90)
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:71)
at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:67)
at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)
at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)
at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.<init>(ContainerImpl.java:356)
at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:311)
at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:307)
at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)
at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)
at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:603)
at com.opensymphony.xwork2.inject.ContainerBuilder$5.create(ContainerBuilder.java:204)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:514)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:524)
at com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:555)
at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:580)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:553)
at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:750)
at org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:364)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:404)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.LocaleProvider, name='default'] in public void com.nova.core.DaisyMultiPartRequest.setLocaleProvider(com.opensymphony.xwork2.LocaleProvider).
at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:239)
at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:229)
at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.<init>(ContainerImpl.java:293)
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:117)
at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:114)
at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:141)
... 39 more

解决方法一:

  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      <init-param>  
        <param-name>config</param-name>  
        <param-value>struts-default.xml,struts-plugin.xml,struts2/struts-*.xml</param-value>  
    </init-param>  
 </filter>
即设置初始化参数时加载以下文件:struts-default.xml(必须),struts-plugin.xml(可选)二个额外的配置文件.
原因:
struts-default.xml是默认配置文件,一些必须的框架参数都默认设置在此配置文件中.
 
解决方法二:
直接将自己的配置文件struts.xml的名称改为struts-default.xml,然后再将struts源文件中的struts-default.xml引入进自己的配置文件中
用<include file="struts-default.xml"/>, 如果你的配置文件中需要返回json数据,那么要将json-default依赖的文件“struts-plugin.xml”也引入进去。
 
解决方法三(最终解决方法):
其实这个错误的意思是找不到“com.opensymphony.xwork2.LocaleProvider”的配置文件映射,只所以会报这个错是因为在实现进度条时重写的JakartaMultiPartRequest类中保留了:

@Inject
public void setLocaleProvider(LocaleProvider provider) {
defaultLocale = provider.getLocale();
}

这段代码要求struts的配置文件中要有LocaleProvaider的映射提供,如果strut2.xml中没有配置该文件就会报这个错......

解决方法:在自己重写的JakartaMultiPartRequest文件中将上面的那段代码删除就可以了、、、(解决方法一、二都可以不用做了!)

 
原文地址:https://www.cnblogs.com/daisyleamo/p/3069226.html