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/サーブレット ライブラリのように) すぐにそれを提供していると想定されます。

しかし、私が知っている世界のどのサーブレットコンテナも、そのライブラリに iText がバンドルされていません。また、サーブレットコンテナのライブラリを実際に変更してiTextを含める場合は、質問で明示的に言及したはずです。したがって、Maven の設定でミスを犯したと思います。おそらく、その意味を実際に理解せずに Maven 座標の例をコピーペーストしたのでしょう。それに応じて修正します。

<scope>compile</scope>

または、完全に削除してください。すでにデフォルトになっています。

以下も参照してください。

于 2013-09-09T10:49:30.640 に答える