【问题标题】:java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTag.setDisabled after Spring Security 4 upgradeSpring Security 4 升级后的 java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTag.setDisabled
【发布时间】:2016-04-29 09:31:15
【问题描述】:

我们将应用程序从spring security 3 升级到spring security 4

除了访问带有只读或禁用属性的输入标签的视图时,它工作正常。

例如,在尝试显示其中一种违规表单时会引发以下异常:

[org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.springframework.web.servlet.tags.form.InputTag.setDisabled(Ljava/lang/String;)V]根本原因 java.lang.NoSuchMethodError: org.springframework.web.servlet.tags.form.InputTag.setDisabled(Ljava/lang/String;)

我无法在我们的开发环境中重现该问题。

依赖项由 Maven 管理。 .war 部署在 Tomcat 7 上,该集群在 2 个服务器的集群上运行。

有人认为这是一个类路径问题,并且可能有 Spring 3 类仍然存在,并且在不同的环境中以不同的顺序加载。但据我所知,我们的pom 文件没有引用任何 Spring 3 罐子。

以前有没有人遇到过这种或类似的情况并设法解决它?

【问题讨论】:

  • 你的项目中似乎没有 org.springframework.web.servlet.tags.form.InputTag.setDisabled(String)。你能粘贴你的 pom.xml 文件吗
  • 运行 mvn dependency:tree 以查看所有依赖项。

标签: java spring tomcat spring-security upgrade


【解决方案1】:

我怀疑您的 tomcat 安装已将您编译的 jsps 缓存在其工作目录中,升级可能需要重新编译 jsps 以获取 Spring 4 的更改。

尝试停止 tomcat,删除工作目录并重新启动,看看是否可以解决问题。

【讨论】:

    【解决方案2】:

    您的应用程序似乎使用旧的 spring 框架,因为在 spring f/w 4 中没有 setDisable(String) 方法。它有 setDisable(boolean)。参见 spring f/w 4 doc http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/tags/form/AbstractHtmlInputElementTag.html#setDisabled-boolean-

    请检查您的 pom .xml,如果没问题,请执行 mvn clean。

    【讨论】:

    • 谢谢 Pankaj。这有帮助。我们现在已经设法在 dev 中重现它,并将原因隔离到 Tomcat 容器中。
    • 升级到 spring 4 后我现在也遇到了类似的问题。我注意到在 STS 中使用 tcServer 时不会出现错误。
    【解决方案3】:

    我遇到了同样的问题,我通过查看 JSP 中的 JSTL 代码解决了这个问题。您是否设置了除 true 或 false 之外的值?我将一个属性值设置为“只读”(一个字符串!)。但这不再被允许。只能使用“真”或“假”。请参阅下面的更新:

    <c:choose>
        <c:when test="${canEdit eq 'true'}">
            <c:set var="isTabReadonly" value="false" />
       </c:when>
       <c:otherwise>
           <c:set var="isTabReadonly" value="readonly" /> // Change to "true"
       </c:otherwise>
    </c:choose>
    

    【讨论】:

      【解决方案4】:

      如果您使用 Jenkins,请在构建之前完全删除构建目录的内容。特别是如果您像我们一样进行了重大更改。不要相信 Maven 通过 Jenkins 总是会告诉你真相。

      从 Java 1.7 上的 Spring 3.2 升级到 Java 1.8 上的 Spring 4.3.x 后,我们遇到了同样的问题。在我们的本地环境(WebSphere Liberty Profile 17、jsp-2.2、servlet-3.0)中一切正常,但在远程环境中的 JSP 中出现此错误(WebSphere 8.5.5.9 Base、jsp-2.2、servlet-3.0)失败。

      【讨论】:

        【解决方案5】:

        您可以更改:从 readonly="true"readonly="${true}" 和 false all project。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-24
          • 2014-11-09
          • 2021-08-30
          • 2020-02-25
          • 2016-03-02
          • 2019-03-24
          • 1970-01-01
          相关资源
          最近更新 更多