0

JSF ページで動作する PrimeFaces複数ファイル アップローダーを取得しようとしていますが、テクニカル リードから次の要件 (交渉の余地はありません!) が与えられています。

  • という名前の PrimeFaces/JSF ページである必要がありますimageUpload.jsf
  • WAR にデプロイし、Tomcat にデプロイする必要があります ( v7.0.19)
  • 次の PrimeFaces/JSF JAR (「エンタープライズ アーキテクチャ標準」) を使用する必要があります: JSF 2.0.3 以降、jsf-api.jarおよびjsf-impl.jarprimefaces-2.2.1.jar

私の最初のタスクは、リンクされたデモ ページの内容を複製することです。つまり、ファイル アップロード コンポーネントを含む単純な JSF ページです。そこで、Eclipse プロジェクトを作成し、正しいディレクトリ構造と構成ファイルと思われるものを作成し、Ant を使用して WAR を作成し、Tomcat の webapps ディレクトリにデプロイしました。にアクセスするとlocalhost:8080/imageUpload.jsf、404 (要求されたリソース (/imageUpload.jsf) は利用できません。) エラーが発生します。

これが私のセットアップです:

Eclipse のプロジェクト ディレクトリ構造:

ImageUploader
    src/
        com.company.imgupload.FileUploadController.java
    build/ --> where java compiles to and then copies over to WEB-INF/classes/
    dist/ --> where image-uploader.war gets WARed to
    lib/ --> copied to WEB-INF/lib/
    war/
        META-INF/
            MANIFEST.MF
        WEB-INF/
            classes/
            lib/
            imageUpload.xhtml
            faces-config.xml
            web.xml

これFileUploadController.javaは、上記のデモ リンクで PrimeFaces の人々が持っているものと同じです。必要に応じてカスタマイズを開始する前に、この単純な例を機能させようとしています。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
    <welcome-file-list>
    <welcome-file>imageUpload.jsf</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
</web-app>

faces-config.xml:

<?xml version="1.0" encoding="utf-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">
    <!-- Not using MangedBean declarations for this simple example -->
</faces-config>

imageUpload.xhtml:

<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
    <link type="text/css" rel="stylesheet" href="themes/bluesky/skin.css" />
</h:head>
<h:body>
    <center>
    <p:panel header="Multiple File Uploader Demo" style="width: 350;">
    <h:form enctype="multipart/form-data">
        <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"   mode="advanced" update="messages" multiple="true" sizeLimit="100000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>
        <p:growl id="messages" showDetail="true"/>
    </h:form>
    </p:panel>
    <div><h:messages ></h:messages></div>
    </center>
</h:body>
</html>

繰り返しますが、これらは次の WAR ファイルに配置されます。

image-uploader.war/
    META-INF/
        MANFIEST.MF
    WEB-INF/
        classes/
            com/company/imgupload/FileUploadController.java
        lib/
            jsf-api.jar (v2.0.3)
            jsf-impl.jar (v2.0.3)
            primefaces-2.2.1.jar
        web.xml
        faces-config.xml
        imageUpload.xhtml

その後、この戦争は に展開され${CATALINA.HOME}/webapps/ます。Tomcat を実行すると、ログにエラーや警告は表示されませんが、次のように表示されcatalina.<date>.logます (私は Windows 7 を使用しています)。

2012 年 4 月 11 日午後 2:31:33 org.apache.catalina.startup.HostConfig deployWAR

情報: Web アプリケーション アーカイブ image-uploader.war をデプロイしています

2012 年 4 月 11 日 2:31:34 PM com.sun.faces.config.ConfigureListener contextInitialized

情報: コンテキスト '/image-uploader' の Mojarra 2.0.3 (FCS b03) を初期化しています

2012 年 4 月 11 日午後 2:31:34 com.sun.faces.spi.InjectionProviderFactory createInstance

情報: JSF1048: PostConstruct/PreDestroy アノテーションが存在します。これらのアノテーションでマークされた ManagedBeans メソッドは、そのアノテーションが処理されます。

ここに他の構成ファイルがありませんか? imageUpload.jsf上に (または代わりに) が必要imageUpload.xhtmlですか?

この 404 エラーの原因は何ですか?!? 前もって感謝します。

注:私が示した JAR バージョンで PrimeFaces/JSF を動作させることが不可能でない限り、標準が何であるかについて私が発言権を持っていないことを尊重してください。JSF 2.0.3 が PrimeFaces 2.2.1 と互換性がないことを証明できれば、おそらく技術幹部に標準を変更するよう説得できるでしょう。しかし、私がそれを証明できない限り、これらは私が立ち往生しているバージョンとテクノロジーです-したがって、SOを「なぜそのテクノロジーを選択するのですか」または「なぜ古いバージョンを使用するのですか」タイプの応答で混乱させないでください!

編集

@Luigi の提案を反映するように myを変更web.xmlし、(@Matt の提案に従って) ブラウザーをポイントしlocalhost:8080/image-uploader/imageUploader.jsf、HTTP 500 エラーが発生しません。

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/image-uploader] threw exception [javax/servlet/jsp/jstl/core/Config] with root cause
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
at com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:340)
at com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:150)
...etc.

これは誰かにとって何か意味がありますか?

4

1 に答える 1

0

まず、Primefaces ショーケースには最新の Primefaces リリース バージョンが表示されることに注意してください。指定されたすべての属性でファイルのアップロードが可能かどうか、バージョン 2.2.1のPrimefaces ドキュメントを確認する必要があります。

次に (Luigi が述べたように)、web.xml の Faces サーブレット マッピングがプロジェクト内のファイルと一致することを確認する必要があります。

最後に、リクエスト URL に移動します。私は Tomcat を使用していませんが、Glassfish には、アプリケーションがデプロイされるコンテキスト ルートがあります。コンテキスト ルートは URL の一部である必要があり、通常は war ファイル名と同じです (変更できますが、Tomcat の場合はどこで変更すればよいかわかりません)。

したがって、コンテキストルートが war ファイル名と同じであると仮定すると、次を試してください。

localhost:8080/image-uploader/imageUpload.jsf
于 2012-04-12T06:13:18.840 に答える