3

削除するコンテンツを選択するWebアプリがあります。選択した画像/フラッシュのプレビューを表示するモーダルポップアップ。ボタンを押すと、すべて正常に動作します。しかし、削除する別のコンテンツを選択すると、モーダルポップアップが表示され、マイクロ秒の間、以前に削除されたファイルが表示され、削除したい新しいコンテンツに置き換えられます。

動的コンテンツを表示するためのコードは次のとおりです。

画像の場合:

<p:graphicImage value="#{controller.tempImage}" height="110" 
    id="imageID" />

フラッシュの場合:

<p:media value="#{controller.tempImage}" width="110" height="110" 
    id="imageID" player="flash" /> 

コントローラ:

public StreamedContent getTempImage() {
    try {
        FacesContext context = FacesContext.getCurrentInstance();

        if (context.getRenderResponse() ) {
            return new DefaultStreamedContent();
        }
        else {              
                tempImage = new DefaultStreamedContent(new FileInputStream("pathToFile"), "image/jpeg");                
        }
    } catch (FileNotFoundException e) {
        tempImage = new DefaultStreamedContent();
    }

    return tempImage;
}

ロードする前にモーダルでtempImagenullに設定しようとしましたが、うまくいきませんでした。autoUpdate=true

削除ボタン(モーダルの削除を表示するボタン):

<p:commandButton id="btnDelete" value="Delete" onclick="deleteModal.show();"  actionListener="#{controller.initDelete}" update=":deleteForm">                                       

フォームの削除(xhtml):

<h:form  id="deleteForm" enctype="multipart/form-data" >
<p:dialog id="deleteDialog" widgetVar="deleteModal" modal="true" resizable="false" draggable="false" autoUpdate="true">
        <p:outputPanel autoUpdate="false" >
            <p:panelGrid id="panelId">
                <p:row>                 
                    <p:column>
                        <p:panelGrid id="bannerPanel">

                            <p:row>
                                <p:column>
                                 <p:graphicImage value="#{controller.tempImage}" height="110" id="imageID" />
                                </p:column>
                            </p:row>    

                        </p:panelGrid>
                    </p:column>
                </p:row>

                <f:facet name="footer">
                    <p:row>
                        <p:column>  
                                <p:commandButton id="doDeleteBtn" value="Delete"
                                     actionListener="#{controller.delete}" >                                                        
                                </p:commandButton>
                        </p:column>
                    </p:row>
                </f:facet>
            </p:panelGrid>
        </p:outputPanel>
</p:dialog>            

4

1 に答える 1

4

から変更する:

onclick="deleteModal.show();"

に:

oncomplete="deleteModal.show();"

これにより、AJAXリクエストが開始される前ではなく、完了した後にダイアログが表示されるようになります。

onclickいわゆるプッシュボタンtype="button"を作成するときは、JavaScriptを実行しているボタンを使用する必要があります。Primefacesのボタンのデフォルトタイプはですsubmit

于 2013-01-28T20:47:48.703 に答える