我想在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
这是如何引起的?如何解决?
答案 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)
xmlns:p="http://primefaces.org/ui"
中添加此文字<html>
<p:calendar value="#{dateBean.date}" />