3

我想<p:calendar>在 Netbeans 开发的 JSF 应用程序中使用,所以我添加了 PrimeFaces 库。但是,当我部署应用程序时,它会出现以下错误:

Context with name [/ManagedBeansWithComponents] has not yet been started
C:\Users\Dell-pc\Documents\NetBeansProjects\ManagedBeansWithComponents\nbproject\build-   impl.xml:1040: The module has not been deployed.
See the server log for details.
BUILD FAILED (total time: 1 second)

服务器日志说:

Source Document: jar:file:/C:/Users/Dell-pc/Documents/NetBeansProjects/ManagedBeansWithComponents/build/web/WEB-INF/lib/primefaces-3.5.jar!/META-INF/faces-config.xml
Cause: Class 'org.primefaces.component.fileupload.FileUploadRenderer' is missing a runtime dependency: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItem

这是如何引起的,我该如何解决?

4

1 回答 1

8

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItem

这是有原因的。很清楚。运行时类路径中缺少提到的类。解决方案相当简单:将提到的类(或包含它的 JAR 文件)放在运行时类路径中。正如包名所暗示的那样,它可以在http://commons.apache.org/fileupload上找到(顺便说一下http://commons.apache.org/io作为依赖项)。只需下载这些 JAR 并将其放在与 PrimeFaces JAR 相同的位置,一切都会好起来的。


与具体问题无关,请注意,此特定问题反过来又不是 PrimeFaces 有意的。这个问题实际上应该只在您FileUploadFilter<p:fileUpload>. web.xml但是,从 GlassFish 4.0 开始,即使应用程序从未使用过,它也会过分地预加载在类路径中找到的每个 JSF 组件和渲染器类。类加载反过来会导致检查其所有运行时依赖项。如果它丢失了,那么你会得到NoClassDefFoundError. 因此,此问题特定于 GlassFish 4.0,并且在使用 GlassFish 3.x 或任何其他 servlet 容器(如 Tomcat 或 JBoss)时不会发生。

于 2013-09-04T12:03:34.123 回答