0

ice:inputFile コンポーネントで深刻な問題に直面しています。アップロード プロセス中にエラーが発生した場合 (無効なファイル名エラー、空のファイル名エラー、最大サイズ超過エラーなど)、ice:message タグを使用してこれらのエラー メッセージを表示します。私は ice:panelPopup を使用し、その中に ice:inputFile コンポーネントを表示します。問題は、アップロード ポップアップを切り替えてもエラー メッセージが表示されることです。これらのメッセージをクリアする方法が必要です。

私を助けてください。

4

2 に答える 2

1

あなたの質問を正しく理解したかどうかは100%わかりませんが、ポップアップをトリガーするアクションに適用された即時キーワードが役立つと思います。

<ice:commandLink
   action="#{this.popup}"
   immediate="true">
      <h:outputText value="foo" />
</ice:commandLink>

通常の JSF ライフ サイクルでは、アクション イベントは通常、プロセス検証フェーズの後に発生します。さらに、値は UI からモデルに更新されます。

基本的に、あらゆる種類のイベントを発生させる可能性のあるすべての JSF コンポーネントで使用できる immediate プロパティは、検証をバイパスし、イベント タイプによってはモデル更新フェーズもバイパスします

代替テキスト http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (Geary, Horstmann, 2008. Core JavaServer Faces - Second Edition. Prentice Hall)

このトピックの詳細については、Suns JSF チュートリアル:即時属性を参照してください。

于 2009-07-09T06:37:36.653 に答える
0

これが私のために働いた2つのことです。

ice:inputFileコンポーネントをバッキングBeanのプロパティにバインドし、ポップアップペインを閉じるときにプロパティのresetメソッドを手動で呼び出します。

<ice:inputFile binding="#{Bean.uploadedFile}"/>

class BackingBean {
    private UICommand uploadedFile;

    public UICommand getUploadedFile() { return uploadedFile; }
    public void setUploadedFile(UICommand uploadedFile) { this.uploadedFile = uploadedFile; }

    public void onClose(ActionEvent event) {
        ((InputFile) uploadedFile).reset();
    }
}

-また-

actionListenerをice:inputFileコンポーネントに追加します。これにより、inputFileコンポーネントが独自の検証エラーをコンテキストに追加するのを防ぎます。actionListenerメソッドで必要な検証を実装し、ice:messagesタグを使用して検証エラーを表示できます。これは、inputFileの検証に依存するよりもうまく機能することがわかりました。これは、エラーメッセージのテキスト/スタイルを完全に制御でき、ポップアップペインが消えるとエラーメッセージが自動的にクリアされるためです。

<ice:inputFile actionListener="#{Bean.onFileUpload}"/>

public class BackingBean {
    public void onFileUpload(ActionEvent event) {
        FileInfo info = ((InputFile) event.getSource()).getFileInfo();
        switch (info.getStatus()) {
            case FileInfo.SAVED :
                // handle uploaded file
            case FileInfo.SIZE_LIMIT_EXCEEDED :
                // file too big error
            ...
        }   
    }
}

于 2009-08-08T02:32:36.657 に答える