2

私は PrimeFaces を持っています<p:dialog>。ダイアログには、入力フィールドとコマンド ボタンがあります。コマンド ボタンは ajax なしでフォームを投稿します (たとえば、シンプル モードでファイルをアップロードするため)。入力フィールドに検証エラーがある場合<p:message>、ダイアログにエラーが正しく表示されますが、非 ajax ポストバックのためにダイアログが閉じます。私は ajax を使用していないため、送信後に検証エラーが発生したときに p:dialog を開いたままにするoncompleteで回答されているように、ダイアログを開いたままにするトリックを実際に使用することはできません。

検証エラーが発生した場合、非 ajax 送信後にダイアログを開いたままにする (または再度開く) オプションは何ですか?

4

1 に答える 1

4

ダイアログ コンポーネントのvisible属性を利用します。これがtrueレンダリング中に設定されている場合、ページはダイアログを開いた状態でレンダリングされます。

たとえば、ポストバックがあり、検証が失敗した場合:

<p:dialog ... visible="#{facesContext.postback and facesContext.validationFailed}">

または、同じページに複数のフォームがあり、ダイアログ独自のフォームが送信されているかどうかのみを確認したい場合:

<p:dialog ... visible="#{dialogForm.submitted and facesContext.validationFailed}">
    <h:form binding="#{dialogForm}">

注:#{facesContext.validationFailed}もちろん、デフォルトで機能するのは、JSF 組み込みの検証機能 ( required="true"<f:validateXxx>など) を使用する場合、および/または十分なValidator実装を使用する場合のみです。たとえば、アクションメソッドで手動で検証し、顔のメッセージを手動で追加している場合、暗黙的にFacesContext#validationFailed()自分自身を呼び出さない限り、これは機能しません。

以下も参照してください。

于 2013-06-18T16:31:40.570 に答える