【问题标题】:NoSuchMethodError when using submitting form in Struts 2在 Struts 2 中使用提交表单时出现 NoSuchMethodError
【发布时间】:2013-02-28 15:06:00
【问题描述】:

我目前正在使用 Apache Struts 网站上的 the tutorial

目前,每当我在表单上按“提交”或单击 Bruce Philips 超链接时,我都会收到 NoSuchMethodError

javax.servlet.ServletException: Filter execution threw an exception
root cause

java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z
    com.opensymphony.xwork2.ognl.OgnlUtil.isEvalExpression(OgnlUtil.java:224)
    com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:215)
    com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:187)
    com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)
    com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:152)
        ....

我也不太确定问题出在哪里,我相信我已经包含了教程所述的所有内容。我尝试在我的pom.xml 中包含依赖项,但这也没有什么区别。

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>Struts2PracticeSite</groupId>
  <artifactId>Struts2PracticeSite</artifactId>
    <packaging>war</packaging>
  <version>0.0.1</version>
    <build>
        <finalName>Struts2PracticeSite</finalName>
    </build>
    <dependencies>
    <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.8</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>
</dependencies>
    
    
</project>

关于如何解决此问题的任何想法?

【问题讨论】:

  • 你的类路径中是否有多个ognl-*.jar
  • 我该如何检查?
  • 如果您将应用程序部署为 WAR 文件,请使用一些 zip 实用程序(WinZip 左右)打开它,然后转到 WEB-INF/lib 文件夹。确保那里只有一个 ognl-*.jar 文件。作为替代方案,运行mvn clean 并重新部署并查看错误是否消失。有时我会遇到类似的错误,我发现我部署的 WAR 中有重复的 jar。
  • 我刚刚尝试了这两种解决方案,不幸的是它没有任何区别。 ognl-3.0.6.jar 是唯一的 ognl,在重新部署之前运行 maven clean 也不起作用。
  • 请包含您的整个 pom。您几乎可以肯定在某处混合了不同版本的库。

标签: java jsp struts2 ognl


【解决方案1】:

struts2.3.1.1 允许 ognl3.0.2.jar + ognl3.0.2-source.jar + ognl3.0.1 同时 . struts2.3.1.2只能有ognl3.0.4,但是去掉其他版本

ognl3.0.4是必须的,可以是唯一的ognl jar!

【讨论】:

  • 虽然我使用的是 struts 2.3.8,但显然可以接受 ognl 3.0.6。我会尝试使用不同的 ognl 版本,看看是否会有所不同。
  • 不,使用不同的 ognl 版本仍然没有区别 =/
  • 你的 jar 文件在哪里?您是使用用户定义库还是将 jar 文件直接放在 WEB-INF/lib 中。 Amd 还告诉我您使用的是哪个 Eclipse 版本。
  • Jar 文件位于 WEB-INF/lib 中。 Eclipse 的版本是 3.3.2。
  • @Arvind:Eclipse 如何支持 Struts2?
【解决方案2】:

删除 ognl 作为依赖项,因为这已经是 struts 2.3.8 本身的临时依赖项,并确保如果 Eclipse 正确部署了您的应用程序,那么会有很多问题。

【讨论】:

  • ognl 已被删除,仍然无法正常工作。我也在用 maven 编译,所以我不确定我的 eclipse 是否对它的部署方式有任何影响。
【解决方案3】:

发现问题...原来我的服务器版本太旧,无法处理 struts 2。我以前使用 Geronimo 版本 2.0.2,现在它在 GlassFish 3.1.2 上运行良好。

【讨论】:

    【解决方案4】:

    将这些 Jar 组合用于 Struts 2 应用程序

    【讨论】:

      【解决方案5】:

      相信你需要的依赖

        <dependency>
           <groupId>org.apache.struts</groupId>
           <artifactId>struts2-core</artifactId>
           <version>${struts2.version}</version>
        </dependency>
        <dependency>
           <groupId>org.apache.struts</groupId>
           <artifactId>struts2-tiles-plugin</artifactId>
           <version>${struts2.version}</version>
        </dependency>
      

      还有其他依赖项,但这些是 Struts2 Tiles 应用程序所必需的。

      【讨论】:

      • 那些已经在我的 Web-INF/lib 中了。我认为 struts2-core 依赖将它们拉进来。
      • 我不知道你在Web-INF/lib中有什么,把jar列表贴出来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多