将PrimeFaces应用程序部署到GlassFish4会导致java.lang.NoClassDefFoundError:org / apache / commons / fileupload / FileItem

时间:2013-09-04 11:28:25

标签: jsf netbeans primefaces glassfish-4

我想在Netbeans开发的JSF应用中使用<p:calendar>,所以我添加了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

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分: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)时不会发生。

答案 1 :(得分:-1)

  1. http://www.primefaces.org/downloads.html下载.jar文件。 (例如primefaces-3.5.jar)。
  2. 在项目中添加文件.jar
  3. 在文件.xhtml
  4. 上的标记xmlns:p="http://primefaces.org/ui"中添加此文字<html>
  5. 编写创建日历的代码使用primefaces:<p:calendar value="#{dateBean.date}" />