0

我遇到了将数据表导出为 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

4

1 回答 1

3

有了这个,

<scope>provided</scope>

您基本上是在告诉 Maven,您已经处理好此依赖项保证存在于运行时类路径中,因此 Maven 不需要将其包含在构建中。即 iText JAR 文件不会出现在 WAR 的/WEB-INF/lib文件夹中,并且假定目标 servletcontainer 已经开箱即用地提供了它(如 Java EE/servlet 库)。

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

<scope>compile</scope>

或者干脆完全删除它,它已经是默认设置了。

也可以看看:

于 2013-09-09T10:49:30.640 回答