0

JSF ページにプロジェクトを保存するボタンがあります。

<p:commandButton id="saveB" actionListener="#{projectsController.create}" value="Projeyi Kaydet" icon="ui-icon-check"  onsuccess="infDialog.show()" onerror="infDialog.hide()"/>

クリックすると、プロジェクトが保存され、ダイアログが開き、保存されたと表示されます。これが私のダイアログです:

<p:dialog id="msgDialog" header="Bilgi" widgetVar="infDialog" resizable="true" showEffect="explode" hideEffect="explode" appendToBody="true" modal="true" closable="false">
    <h:form>
        <h:panelGrid id="display" columns="2" cellpadding="10" style="margin:0 auto;">  
            <f:facet name="header">
                <center>
                    <h:outputText value="Proje kaydedildi." />
                </center>
            </f:facet>

            <h:outputText value="Projeye döküman eklemek için aşağıdaki paneli kullanabilirsiniz." />


            <f:facet name="footer">
                <center>
                    <h:form enctype="multipart/form-data">  

                        <p:fileUpload fileUploadListener="#{fileUploader.handleFileUpload}"  
                                      mode="advanced"  
                                      update="messages"  
                                      auto="false"  
                                      sizeLimit="100000000"  
                                      multiple="true"
                                      allowTypes="/(\.|\/)(gif|jpe?g|png|pdf|avi|mpeg|mp4)$/"/>  

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

                    </h:form>
                </center>
            </f:facet>
            <br />
            <br />
            <center>
                <p:commandButton value="Proje Eklemeyi Tamamla" onclick="window.location.replace(window.location.href);"/>
            </center>

        </h:panelGrid>  
    </h:form>
</p:dialog>

ここでの問題は、フォームをもう一度確認するように言う代わりに、まだ表示されているフィールドに入力せず、プロジェクトが作成されたと言うときです。

どうすればこれを達成できますか?アイデアをありがとう。

4

1 に答える 1

3

<form>まず、タグがネストされているため、構造が正しいとは見なされません。これはHTMLでは正しくないため、JSFでは正しくありません。

2番目onerrorのコールバックには、フォームの検証には何もありませんが、AJAXリクエストにエラーがあります。onsuccess変更してonerror、次のようなものを使用する必要があります。

oncomplete="handleSave(xhr, status, args)"

次のようにJavaScript関数を定義します。

if (args.validationFailed) {
    infDialog.hide()
} else {
    infDialog.show()
}

validationFailed検証エラーが発生した場合にPrimefacesによって暗黙的にtrueに設定されるajaxコールバックパラメーターです。また、必要に応じてタグにrequired="true"属性を追加する必要があります。p:fileUpload

于 2013-01-30T10:25:40.447 に答える