<p:dataexporter>失败,出现java.lang.ClassNotFoundException:com.lowagie.text.Phrase </p:dataexporter>

时间:2013-09-09 07:51:16

标签: jsf maven primefaces itext

我遇到将数据表导出为pdf的问题。我用:

<primeFacesVersion>3.5</primeFacesVersion>

  <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.7</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>2.1.7</version>
        <scope>provided</scope>
    </dependency>

在xhtml中:

<h:form id="listForm">

    <h:panelGrid width="100%" columns="1">
        <p:dataTable id="listTable" var="employee"
                     value="#{employeeBean.result}" paginator="true" dynamic="true"
                     rows="10" rowKey="#{item.id}" rowIndexVar="i" selection="#{employeeBean.selected}"
                     emptyMessage="#{label['no.record.found']}" sortDescMessage="#{label['sort.desc.message']}"
                     paginatorPosition="bottom" sortAscMessage="#{label['sort.asc.message']}"
                     update="listTable">
.....
      <h:commandLink value="#{label['PDF']}" ajax="false" icon="excel-icon">
        <p:dataExporter type="pdf" target="listTable" fileName="emplList"/>
        </h:commandLink>
 </h:form>

抛出此异常是不可行的:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [] threw exception [com/lowagie/text/Phrase] with root cause

java.lang.ClassNotFoundException:com.lowagie.text.Phrase

1 个答案:

答案 0 :(得分:3)

有了这个,

<scope>provided</scope>

你基本上告诉Maven你已经注意到运行时类路径中存在这种依赖关系,因此Maven不需要在构建中包含它。即iText JAR文件不会在WAR的/WEB-INF/lib文件夹中结束,并且假定目标servletcontainer已经提供了它(如Java EE / servlet库)。

但是,我所知道的世界上没有一个servlet容器将iText捆绑在其库中。另外,如果您实际上已经修改了servletcontainer的库以包含iText,那么您肯定会在问题中明确提到它。所以,我相信你在Maven配置中犯了一个错误。也许您在没有真正理解其含义的情况下对一个Maven坐标进行了复制。相应地修复它:

<scope>compile</scope>

或者只是完全删除它,它已经是默认值。

另见: