3

アクションが完了するまでボタンを無効にしようとしていましたが、これでボタンが有効になります

ボタンのコード:

<p:commandButton action="#{navigationBean.naviagtion}"   value="Next" disabled="#{!fileUploadController.uploadComplete}"/>

これはBeanFileUploadControllerであり、管理およびビュースコープのBeanです。

    private boolean uploadComplete;

            uploadComplete = false;
            System.out.println("Upload complete value before copy file " + uploadComplete);
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream());


        } catch (IOException e) {
//handle the exception
            e.printStackTrace();
        }

    }



    public void copyFile(String fileName, InputStream in) throws IOException {
        try {
            uploadComplete = true;

//does things 

    public boolean isUploadComplete() {
        return uploadComplete;
    }

    public void setUploadComplete(boolean uploadComplete) {
        this.uploadComplete = uploadComplete;
    }

コンソールでは、uploadCompleteがfalseからtrueに変更されるたびに出力するように設定し、次のようになります。

INFO: Upload complete value before copy file false
INFO: upload complete value is : true

値がfalseからtrueに変わることがわかるように、問題はボタンが二度とアクティブにならないことです。これはなぜですか?

これは問題なく動作し、エラーなどはありません。ボタンの問題です。

編集 :

いくつかのテストの後、私はこのコードで見つけました:

<p:commandButton id="Nav" action="#{navigationBean.naviagtion}"   value="Next"  ajax="False" update ="Nav" disabled="#{fileUploadController.uploadComplete}"/> 

起動時にボタンがライブになりますが、ファイルをアップロードしてボタンをクリックすると、ページが更新されて無効になります。これは、私がやりたいことの正反対です。どうすればこのアクションを元に戻すことができますか?真と偽のステートメントを入れ替えてみましたが、これは機能しませんでした。これにより、ボタンが無効になることはありませんでした。

コントロールを反転して、現在行っていることとは逆のことを行うにはどうすればよいですか?

4

1 に答える 1

1

私たちの最新の会話の後、私は公式ドキュメントを見ました。
Sujoyがコメントしたように、アップロードの終了後にコンポーネントをレンダリングするp:fileOupload属性があることがわかりました。updateしたがって、Navに追加update="Nav"して更新します<p:fileUpload>。このようにして、ボタンを適切に再レンダリングする必要があります。また、ボタンを無効にしないでください。に切り替える
必要があります。ボタン自体ではなく、upload-componentに更新を配置する必要があります。 うまくいけば、あなたのテストはあなたのコードを台無しにしていません;)disabled="#{fileUploadController.uploadComplete}"/>disabled="#{!fileUploadController.uploadComplete}"/>uploadComplete == true

于 2013-02-17T19:54:20.083 に答える