8

私は PrimeFaces 3.1.2、NetBeans 7.2、JSF 2.1、および GlassFish 3.1.2 を使用しています。

http://www.primefaces.org/showcase/ui/fileUploadAuto.jsf およびhttp://www.primefaces.org/showcase/ui/fileDownload.jsfから取得した実際のコードを使用しています。

ファイル アップロード コードを実行すると、まったく機能しません。ファイルはアップロードされず、成功メッセージは表示されません。ただし、ファイル サイズが上記のサイズを超えると、ファイル サイズが大きすぎるというメッセージが表示されます。

これが私の見解です:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data">
            <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
                mode="advanced"
                update="messages"
                auto="true"
                sizeLimit="100000" 
                allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>
            <p:growl id="messages" showDetail="true"/>
        </h:form>
    </h:body>
</html>

これが私のバッキングビーンです:

package com;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;

@ManagedBean
@SessionScoped
public class FileUploadController {
    public void handleFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful",   event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

基本的に、PrimeFaces ショーケース ページのコードと同じです。

ファイル ダウンロード コードも同様です。ダウンロードをクリックしても何も起こりません。気づく前にポップアップが開いたり閉じたりします。get resource stream (ダウンロード部分) で述べたように、画像ファイルを配置していますが、何が問題なのかわかりません。コードも基本的に PrimeFaces ショーケース ページと同じです。

Netbeans の Glassfish にログやエラーが表示されません。また、必要に応じてログを有効にする方法もわかりません。

4

3 に答える 3

9

最初に、いくつかのライブラリをアプリケーションに追加する必要があります。実際のところ、PrimeFaces ファイルのアップロードは、Apache commons-file-upload および commons-io ライブラリに依存しています。それらをダウンロードして、WEB-INF/lib パスに追加します。

以下のリンクからダウンロードできます。

http://commons.apache.org/io/

http://commons.apache.org/fileupload/

さらに、それを web.xml に構成する必要があります

<filter>
  <filter-name>PrimeFaces FileUpload Filter</filter-name>
  <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
  <init-param>
    <param-name>thresholdSize</param-name>
    <param-value>51200</param-value>
  </init-param>
  <init-param>
    <param-name>uploadDirectory</param-name>
    <param-value>C:\etc</param-value>
   </init-param>
</filter>
<filter-mapping>
  <filter-name>PrimeFaces FileUpload Filter</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

また、アップロードしたファイルの宛先をプログラムで変更する場合は、以下をご覧ください。

PrimeFaces FileUploadファイルの保存先

于 2012-11-20T11:19:55.147 に答える
1

私が気づいたことの 1 つは、「allowTypes」タグ内に正規表現を正しく配置しないと、「fileupload」要素がアクションをトリガーせず、アクションに到達できないという印象を与えることです。

これがあなたの問題ではないことはわかっていますが、この情報を共有することが重要だと思います.

于 2013-01-11T13:08:35.463 に答える
1

xhtml から Bean を使用できるようにするには、コントローラーに @ManagedBean として注釈を付け、スコープを設定する必要があります。この場合、できれば @ViewScoped または @RequestScoped を使用してください。

例:

@ManagedBean
@ViewScoped
public class FileUploadController {

    public void handleFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful",     event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

jsf マネージド Bean の仕組みについて詳しくは、http ://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/ をご覧ください。

于 2012-11-20T10:38:29.517 に答える