6

Primefacesの事前アップロードモードを使用して、ユーザーが1つのファイルのみをアップロードするように制限することで、可能かどうか疑問に思っています。現在、次のようになっています。

 <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
                                  mode="advanced" 
                                  multiple="false" 
                                  update="messages"
                                  sizeLimit="100000000" 
                                  allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf)$/"
                                  auto="false"/>


                    <p:growl id="messages" showDetail="true"/>

ご覧のとおり、muliple = "false"がありますが、ユーザーは複数のファイルをアップロードできます。ヒントはありますか?

編集 :

                <p:fileUpload widgetVar="upload" fileUploadListener="#{fileUploadController.handleFileUpload}"
                              mode="advanced" 
                              multiple="false" 
                              update="messages"
                              label="Select File"
                              sizeLimit="100000000" 
                              allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf|html)$/"
                              auto="false"/>


                <p:growl id="messages" showDetail="true"/>

上記のwidgetVarを追加しました

そして私のjsで

<script type="text/javascript"> 
        function Naviagtion()
        {
            //alert("Sent to the printing holding queue, you may close this app now, your work will still print out ");
            window.setTimeout(afterDelay, 500);
            location.href = 'FilesUploaded.xhtml';

        }

        upload.buttonBar.find('input[type=file]').change(function() {
            if (this.value) {
                var files = upload.uploadContent.find('.files tr');

                if (files.length > 1) {
                    files.get(0).remove();
                }
            }
        });
    </script>

しかし、私はまだマルチアップロードすることができます、私はこれを正しい方向に進めていますか?

4

3 に答える 3

12

それを解決するためのより良い振る舞いは@BalusCが提案した通りであるはずですが、primefaces4.0では属性が表示されています

fileLimit="1"

これを1に設定すると、[選択]ボタンを使用して複数のファイルの追加を禁止できます。ユーザーがさらにファイルを追加すると、それは単に言う

「ファイルの最大数を超えました」

于 2013-10-09T06:47:44.907 に答える
8

multiple="false"のみは、ブラウザ固有の参照ダイアログで複数のファイルの選択を無効にするようにWebブラウザに指示しますただし、エンドユーザーがPrimeFacesファイルアップロードセクションの[選択]ボタンを複数回クリックして、1つのファイルを複数回参照および追加することを妨げることはありません。

最善の策は、新しいファイルが選択されたときに、以前に選択されたすべてのファイルを削除するために、JS/jQueryを取り込むことです。あなたがあなたにを与え<p:fileUpload>widgetVar="upload"ならば、これはするべきです:

$(document).ready(function() {
    upload.buttonBar.find('input[type=file]').change(function() {
        if (this.value) {
            var files = upload.uploadContent.find('.files tr');

            if (files.length > 1) {
                files.get(0).remove();
            }
        }
    });
});

PrimeFaces3.5で動作します。

于 2013-02-14T19:39:48.057 に答える
0

ファイル制限を1に設定していて、ファイルの読み込み中にエラーが発生した場合は、ファイルのアップロードを再度機能させるためにページを更新する必要があります。ページを更新しないと、制限を超えたというエラーメッセージが表示されます。

受け入れられた回答のように、JSでソリューションを使用しましたが、wigetWarが機能しなかったため、セレクターを変更する必要があります。

私の見解では:

<p:fileUpload id="objectUpload"... />

私のポートレットテーマでは、ファイルを含むテーブルのcssクラスは「ui-fileupload-files」です。

$(document).ready(function() {
  $("div[id*='objectUpload']").find('input[type=file]').change(function() {

    if (this.value) {
        var files = $("div[id*='objectUpload']").find('.uifileupload-files tr');        
        if (files.length > 1) {     
            files.get(0).remove();
        }
    }
  });
});

お役に立てば幸いです。PrimeFaces6.0を使用しました

于 2017-01-11T13:29:49.470 に答える