0

我试图创建一个基本的 JSF 应用程序,但似乎无法让它工作 - 我怀疑缺少某些东西,默认情况下在 faces-config.xml 文件中,但我不确定是什么。我收到此错误:

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

我用谷歌搜索它,发现它是一个据称丢失的 jar 文件。我下载并添加到项目的“构建路径”中,刷新并重新启动服务器,但它仍然无法正常工作。外部 JAR 文件称为“jstl-1.2.jar”。

以下是报告的错误列表:

HTTP Status 500 - javax/servlet/jsp/jstl/core/Config

type Exception report

message javax/servlet/jsp/jstl/core/Config

description The server encountered an internal error that prevented it from fulfilling     
this request.

exception 

javax.servlet.ServletException: javax/servlet/jsp/jstl/core/Config
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)


root cause 

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:345)
com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:154)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)


root cause 

java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:345)
com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:154)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.32 logs.

有任何想法吗?这必须是一个简单的修复,因为从 JSF 应用程序中弹出一个简单的 HelloWorld 不会这么复杂。

干杯

4

2 回答 2

2

我下载并添加到项目的“构建路径”中,刷新并重新启动服务器,但它仍然无法正常工作。

这不是正确的方法。您根本不应该触摸项目的Build Path属性。您应该直接将 JSTL JAR 文件放到/WEB-INF/lib项目的文件夹中。您应该确保撤消您在构建路径属性中所做的每一个更改,以粗心地尝试“修复”此问题,否则 Web 应用程序仍将在构建/部署时使用损坏的类路径/库结构。

为什么需要它是因为 JSF2 Facelets 需要 JSTL 依赖项才能运行<c:xxx>此处列出的所有标记。但是,您使用的是 Tomcat,它是一个准系统 JSP/Servlet 容器,它没有随 JSTL 一起提供。您必须单独下载并安装它。在像 Glassfish 这样成熟的容器上,您不需要这样做(顺便说一下,对于 JSF JAR 文件也不需要)。

也可以看看:

于 2012-11-21T16:25:44.110 回答
0

将 jar 文件移动到 WEB-INF 文件夹中并没有解决问题,所以经过一番搜索后,我遇到了这个教程。按照它的步骤后它也不起作用所以我必须做的是:

  1. 从上面的网站下载 zip 文件夹
  2. 把它解压到你方便的地方——对我来说就是桌面
  3. 检查 lib 文件夹并将其中的 jar 文件放入另一个文件夹
  4. 按照创建项目的正常步骤 -> 文件 -> 新建 -> 动态 Web 项目
  5. 输入您的项目详细信息
  6. 当您进入“JSF Capabilities”页面时,单击“Manage Libraries”图标,选择“New”并创建一个文件夹,随意调用它。将之前的 jar 文件添加到此,然后选择完成。

你现在应该可以走了!

感谢帮助

PS 这是 JAR 文件的列表,它们再次位于 zip 的 WEB-INF/lib 文件夹中

  • commons-beanutils-1.7.0.jar
  • commons-chain-1.1.jar
  • commons-collections.jar
  • commons-digester-1.8.jar
  • commons-logging-1.0.4.jar
  • jsf-api.jar
  • jsf-impl.jar
  • jstl.jar
于 2012-11-21T14:57:18.690 回答