com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'ext-comp-1020' with value '[

本文讨论了Struts2框架中关于Ognl表达式设置错误的问题,特别是ext-comp-1020参数的使用。分析了错误产生的原因,并提供了一种临时解决方案,即屏蔽相关警告信息。此外,介绍了在log4j.properties文件中调整日志级别的方法来避免此类信息的显示。
[ WARN]http-8080-2 -com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'ext-comp-1020' with value '[Ljava.lang.String;@9f2ec0'
ognl.InappropriateExpressionException: Inappropriate OGNL expression: (ext - comp) - 1020
	at ognl.SimpleNode.setValueBody(SimpleNode.java:312)
	at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
	at ognl.SimpleNode.setValue(SimpleNode.java:301)
	at ognl.Ognl.setValue(Ognl.java:737)
	at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
	at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
	at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at com.jd.labmanager.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:34)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
	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:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)

警告信息如上,火狐中信息

ext 把ext-comp-1020作为参数提交了,struts2不能赋值没setter的ext-comp-1020,报警告

暂时找不到解决方法,于是把[warn]屏蔽了

log4j.properties中加入

log4j.logger.com.opensymphony.xwork2 = ERROR



15:30:30.601 [http-nio-8080-exec-5] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: ognl.OgnlAction.execute() java.lang.NoSuchMethodException: ognl.OgnlAction.execute() at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1247) ~[ognl-3.0.19.jar:?] at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) ~[xwork-core-2.3.32.jar:2.3.32] at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1370) ~[ognl-3.0.19.jar:?] at ognl.ASTMethod.getValueBody(ASTMethod.java:91) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.getValue(SimpleNode.java:258) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:467) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:431) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:352) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:404) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:350) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251) ~[xwork-core-2.3.32.jar:2.3.32] at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) ~[struts2-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.Defaul
03-22
<think>好的,我现在需要解决用户在Java项目中导入com.opensymphony.xwork2.ActionSupport时出现的编译错误。根据用户提供的引用内容,问题主要集中在包不存在、类找不到、符号变量错误以及方法覆盖问题。我需要逐步分析可能的原因和解决方法。 首先,用户提到的错误包括“程序包com.opensymphony.xwork2不存在”和“找不到符号类ActionSupport”。这些通常意味着项目缺少相关的依赖库,或者依赖库的版本不正确。根据引用[4]的信息,版本冲突或缺失可能导致这类问题,特别是xworkStruts2的版本不兼容。 接下来,用户提到已经导入包但问题依旧存在。可能的原因包括依赖未正确添加到项目的构建路径中,或者存在多个版本的jar包导致冲突。例如,引用[4]指出,添加xwork-2.1.2.jar可能导致与其他xwork包的冲突。因此,需要检查项目的依赖管理,如Maven或Gradle配置,确保所有相关库的版本一致且兼容。 另外,关于“方法不会覆盖或实现超类型的方法”的错误,这通常是由于方法签名不正确或父类/接口版本不一致引起的。例如,用户可能在子类中尝试覆盖一个不存在于父类中的方法,或者使用的Struts2版本中ActionSupport类的结构发生了变化。 解决方案方面,首先需要确认是否正确引入了Struts2的核心库,如struts2-core,并且排除了冲突的依赖。然后检查构建工具中的依赖声明,确保没有重复或版本不一致的情况。同时,清理项目并重新构建,有时候旧的编译文件可能导致问题。如果使用IDE如IntelliJ IDEA,可能需要重新导入项目或更新依赖。 还需要考虑依赖传递带来的冲突,使用Maven的依赖树分析工具(如mvn dependency:tree)来识别冲突的jar包,并进行排除。例如,引用[4]提到xwork的版本冲突,因此需要确保所有模块使用的xwork版本一致。 最后,如果问题依旧存在,可能需要检查项目的整体架构,例如web.xml和struts.xml的配置是否正确,以及运行时环境是否加载了正确的jar包。确保在部署时所有必要的依赖都被正确打包,并且服务器没有缓存旧版本的库。 总结下来,解决步骤应包括检查依赖配置、解决版本冲突、清理和重建项目,以及验证配置文件的正确性。通过这些步骤,应该能够解决用户遇到的编译错误。</think>### 解决Java项目导入`com.opensymphony.xwork2.ActionSupport`报错的方法 #### **问题原因分析** 报错如`程序包com.opensymphony.xwork2不存在`或`找不到符号类ActionSupport`,通常由以下原因导致: 1. **依赖缺失或版本冲突**:未正确引入Struts2核心库(如`xwork-core`或`struts2-core`),或项目中存在多个版本的`xwork`/`struts2`依赖[^1][^4]。 2. **构建工具配置错误**:依赖未正确添加到构建路径(如Maven/Gradle配置遗漏)。 3. **IDE缓存问题**:旧编译文件残留导致引用错误。 4. **方法覆盖错误**:尝试覆盖父类不存在的方法,可能与版本升级后的API变化有关[^1][^2]。 --- #### **逐步解决方案** ##### **1. 检查依赖配置** - **Maven项目**:在`pom.xml`中添加Struts2核心依赖(注意版本一致性): ```xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.30</version> <!-- 根据项目需求选择版本 --> </dependency> ``` - **手动导入JAR包**:若未使用构建工具,需下载以下JAR包并添加到`lib`目录: - `struts2-core-x.x.x.jar` - `xwork-core-x.x.x.jar` - `ognl-x.x.x.jar`(依赖传递) ##### **2. 解决版本冲突** - **检查依赖树**:运行`mvn dependency:tree`(Maven)或查看Gradle依赖图,排除重复依赖。例如: ```xml <dependency> <groupId>冲突的组ID</groupId> <artifactId>冲突的库</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>com.opensymphony</groupId> <artifactId>xwork</artifactId> </exclusion> </exclusions> </dependency> ``` - **统一版本号**:确保所有Struts2相关库(如`struts2-core`、`xwork-core`)版本一致[^4]。 ##### **3. 清理和重建项目** - **IDE操作**: 1. 执行清理:`Build > Clean Project`(IntelliJ/Eclipse)。 2. 重新构建:`Build > Rebuild Project`。 3. 刷新依赖:Maven项目点击`Reload All Maven Projects`,Gradle项目运行`gradle --refresh-dependencies`。 ##### **4. 验证代码兼容性** - 检查`ActionSupport`的子类方法是否与父类一致。例如: ```java public class HelloAction extends ActionSupport { @Override public String execute() { // 方法名和返回值需与父类定义一致 return SUCCESS; // 确保SUCCESS常量存在(通常继承自ActionSupport) } } ``` - 若仍报`SUCCESS未找到`,可能是Struts2版本差异,尝试直接使用字符串`"success"`。 ##### **5. 检查配置文件** - **`web.xml`**:确保Struts2的过滤器配置正确: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> ``` - **`struts.xml`**:确认路径和包配置无误,例如: ```xml <struts> <package name="default" extends="struts-default"> <action name="hello" class="com.example.HelloAction"> <result name="success">/hello.jsp</result> </action> </package> </struts> ``` --- #### **验证步骤** 1. 运行`mvn clean install`或构建工具等效命令。 2. 启动应用服务器(如Tomcat),观察启动日志是否报`ClassNotFoundException`。 3. 访问对应URL,测试Action是否正常响应。 --- #### **相关问题** 1. **如何排查Maven依赖冲突?** 答:使用`mvn dependency:tree -Dverbose`分析依赖树,定位重复库。 2. **Struts2升级后常见兼容性问题有哪些?** 答:如常量名变更(`SUCCESS`改为小写)、过滤器类名变化等[^4]。 3. **IDEA中如何强制刷新依赖缓存?** 答:删除`~/.m2/repository`目录(Maven)或使用`File > Invalidate Caches`。 --- 通过以上步骤,可系统性解决`com.opensymphony.xwork2`相关编译错误。若问题仍存在,建议检查服务器部署环境是否包含正确版本的JAR文件[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值