JSF ページで動作する PrimeFaces複数ファイル アップローダーを取得しようとしていますが、テクニカル リードから次の要件 (交渉の余地はありません!) が与えられています。
- という名前の PrimeFaces/JSF ページである必要があります
imageUpload.jsf
- WAR にデプロイし、Tomcat にデプロイする必要があります (
v7.0.19
) - 次の PrimeFaces/JSF JAR (「エンタープライズ アーキテクチャ標準」) を使用する必要があります: JSF 2.0.3 以降、
jsf-api.jar
およびjsf-impl.jar
primefaces-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.
これは誰かにとって何か意味がありますか?