我遇到将数据表导出为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
答案 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>
或者只是完全删除它,它已经是默认值。