【问题标题】:Error Showing Data Base Data with Spring MVC使用 Spring MVC 显示数据库数据时出错
【发布时间】:2010-08-24 14:34:08
【问题描述】:

非常感谢这个社区对我的学习和生产经验提供的帮助,我有另一个问题来找你,提前谢谢你。

好的,我有一个开发了 3 年的 Flex + Spring + Hibernate + Tomcat + Mysql 应用程序。所以现在我需要在它们上添加一些 html 视图。所以我打算将spring框架的jstl/jsp部分插入到项目中。

应用程序的所有逻辑都是通过一个名为 CatalogFacadeImpl 的控制器从视图 (flex) 调用的。所以我打算做的是创建一堆控制器,它们调用 CatalogFacadeImpl 的方法并将结果抛出到新的 jstl 视图。

问题是我在将 mvc 控制器类、ModelAndView 数据连接到 jsp/jstl 文件时遇到问题。

现在,在我做的测试中,我让控制器像这样调用 CatalogFacadeImpl:

public class Welcome implements Controller {

    private String successView;
    public static final String MAP_KEY = "categorias";
    private CatalogFacadeImpl catalogFacadeImpl ;



    public ModelAndView handleRequest(
               HttpServletRequest request,
               HttpServletResponse response) throws Exception
       {

           List lista = catalogFacadeImpl.getUserList();

           return new ModelAndView(getSuccessView(),MAP_KEY,lista);

       }

    public String getSuccessView() {
        return successView;
    }

    public void setSuccessView(String successView) {
        this.successView = successView;
    }

    public void setCatalogFacadeImpl(CatalogFacadeImpl catalog){
        this.catalogFacadeImpl = catalog;
    }
}

当我调试它时,lista 会为数据带来正确的对象!所以它有效!

没有 jstl 的视图也可以正常工作,但是当我添加应该为我带来 ModelAndView 成功信息的代码时,我收到错误:( 这是代码(注意,由于编辑器,html 代码无法正确显示, 但它是和添加了 jstl 代码的 html):

taglib prefix="c" uri="http://java.sun.com/jstl/core"  
<html>
  <head><title>Example :: Spring Application</title></head>
  <body>
    <h1>Example - Spring Application</h1>
    <p>Lista de usuarios</p>
  <c:forEach items="${lista}" var="lista">
                <tr>

                    <c:out value="${lista.userName}" />
                        <div></div>
                        </td>
                    </tr>
                </c:forEach>
  </body>
</html>

我得到了错误:

<html><head><title>Apache Tomcat/5.5.26 - Informe de Error</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>Estado HTTP 500 - </h1><hr noshade="noshade" size="1"><p><b>type</b> Informe de Excepción</p><p><b>mensaje</b> <u></u></p><p><b>descripción</b> <u>El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.</u></p><p><b>excepción</b> </p><pre>javax.servlet.ServletException: javax/el/ValueExpression
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:273)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
</pre><p></p><p><b>causa raíz</b> </p><pre>java.lang.NoClassDefFoundError: javax/el/ValueExpression
    java.lang.Class.getDeclaredMethods0(Native Method)
    java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    java.lang.Class.getDeclaredMethods(Class.java:1791)
    java.beans.Introspector$1.run(Introspector.java:1272)
    java.security.AccessController.doPrivileged(Native Method)
    java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1270)
    java.beans.Introspector.getTargetMethodInfo(Introspector.java:1136)
    java.beans.Introspector.getBeanInfo(Introspector.java:387)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    java.beans.Introspector.getBeanInfo(Introspector.java:220)
    java.beans.Introspector.&lt;init&gt;(Introspector.java:368)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    java.beans.Introspector.getBeanInfo(Introspector.java:220)
    java.beans.Introspector.&lt;init&gt;(Introspector.java:368)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    org.apache.jasper.compiler.Generator$TagHandlerInfo.&lt;init&gt;(Generator.java:3729)
    org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2132)
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1600)
    org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
    org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    org.apache.jasper.compiler.Generator.generate(Generator.java:3321)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

</pre><p></p><p><b>causa raíz</b> </p><pre>java.lang.ClassNotFoundException: javax.el.ValueExpression
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1363)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1209)
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
    java.lang.Class.getDeclaredMethods0(Native Method)
    java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    java.lang.Class.getDeclaredMethods(Class.java:1791)
    java.beans.Introspector$1.run(Introspector.java:1272)
    java.security.AccessController.doPrivileged(Native Method)
    java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1270)
    java.beans.Introspector.getTargetMethodInfo(Introspector.java:1136)
    java.beans.Introspector.getBeanInfo(Introspector.java:387)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    java.beans.Introspector.getBeanInfo(Introspector.java:220)
    java.beans.Introspector.&lt;init&gt;(Introspector.java:368)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    java.beans.Introspector.getBeanInfo(Introspector.java:220)
    java.beans.Introspector.&lt;init&gt;(Introspector.java:368)
    java.beans.Introspector.getBeanInfo(Introspector.java:159)
    org.apache.jasper.compiler.Generator$TagHandlerInfo.&lt;init&gt;(Generator.java:3729)
    org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2132)
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1600)
    org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
    org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    org.apache.jasper.compiler.Generator.generate(Generator.java:3321)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
</pre><p></p><p><b>nota</b> <u>La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/5.5.26.</u></p><hr noshade="noshade" size="1"><h3>Apache Tomcat/5.5.26</h3></body></html>

【问题讨论】:

    标签: java spring jsp jstl


    【解决方案1】:

    闻起来像类加载器问题。

    javax.el.ValueExpression只出现在JSP 2.1中,Tomcat 5.5只支持JSP 2.0(见version matrix)。

    虽然有些东西显然要求javax.el.ValueExpression,但我怀疑您已经在 WAR 中的某个地方打包了 JSTL、JSP 和/或 Servlet 库的副本——这些库可能用于更新版本的 JSP,并且它们会与 Tomcat 自己的库发生冲突。看看是否是这种情况,如果是,请从 WAR 中删除该库。

    另外,您的 JSTL 声明已过期。应该是

    http://java.sun.com/jsp/jstl/core

    不是

    http://java.sun.com/jstl/core(这是旧的 JSP 2.0 之前的 URI)。

    【讨论】:

      【解决方案2】:

      Based on this forum,我认为您可能将冲突的 servlet-api.jar 与您的代码捆绑在一起。

      【讨论】:

      • 您好,不确定您的意思,我的库中确实有 servlet-api.jar,但是,我现在不知道如何将它与问题联系起来。谢谢
      猜你喜欢
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2014-10-09
      • 2020-07-19
      • 1970-01-01
      • 2019-01-07
      • 2017-08-02
      • 2013-04-08
      相关资源
      最近更新 更多