2016-09-08 22 views
0

PrimeFaces​​コンポーネントを使用して削除を実行しています。確認のステップを追加するために、私はonclickイベントを使用して、JavaScript確認ダイアログが表示されました。私のコード下:Primefaces p:menuitemはonclickイベントがtrueを返すとイベントを発生しません

<p:menuitem icon="fa fa-fw fa-remove" 
    title="#{message.global_remove}" 
    value="#{message.global_remove}" 
    actionListener="#{componentListMB.delete(cp.id)}" 
    onclick="return confirm('#{message.component_list_confirm_deletion}')" 
    update=":component_list" /> 

ユーザーではなく、#は、URLの末尾に追加され、削除を確認しますが、アクションが発射されていません。

p:commandButtonでイベントが発生しないのはなぜですか?


私が使用しています:

  • JSF 2.1.7
  • Primefaces 6.0

答えて

5

を、#は、URLの末尾に追加されます。

Primefacesは実際には、独自のAjaxリクエストを実行するための要素のonclickイベントを使用して、あなたの​​aなどのHTMLタグをレンダリングしています。例えば。

onclick="PrimeFaces.ab({...});return false;" 

彼らはので、何#がURLに表示されません、a要素の最後which prevents the default browser behaviourreturn false;を追加したことに注意してください。あなたはconfirm機能を追加すると、以下のように、それはonclick要素の先頭に配置されて

onclick="return confirm('confirm?');PrimeFaces.ab({...});return false;" 

あなたはそれを確認していない場合は、何の#はデフォルト以来、URLに表示されません行動が妨げられた。確認したら、それが表示されます。しかし、最初にreturnステートメントを呼び出すので、Ajaxアクションは実行されません。

次のようにあなたの​​のonclickイベントを変更予想される動作を実現することができます。

onclick="if (!confirm('#{message.component_list_confirm_deletion}')) return false;" 

p:commandButtonすべてで正常に動作しながら、イベントが発生しないのはなぜ?

プライムフェイスはp:commandButtonとは異なる処理を行います。ユーザーのonclickとPrimefaces Ajax関数を別々の関数に入れ、関数を順番に実行するPrimefaces#bcnに送信します。 falseを返す最初の関数は、残りの関数の処理を停止します。

onclick="PrimeFaces.bcn(this, event, [function(event){return confirm('confirm?')},function(event){PrimeFaces.ab({...});return false;}]);" 
2

あなたが確認を行うために<p:menuitem><p:confirm>を使用することができます。

EDIT:confirm()の前にreturnを削除するだけで、すべて正常に動作するはずです。

+0

'confirm'を使用して' return'を実行しても問題は解決されません。代わりに、確認ダイアログがキャンセルされてもフォームが送信されます。 ' ' –

+0

を使用する前に' onclick'イベントを使用して回避策があるかどうかを知りたいのですが、ここではPrimeFaces 6.0で動作しています。 'return confirm(...);'を使うとうまくいきません。あなたのメニューは何ですか? ''? – LeonardoHAlmeida

+0

私のメニューは '' –

0

<p:menuitem> actionListenerを<p:commandButton>に委任しようとするとよいでしょう。確認メッセージのため<p:commandButton>の中に<p:confirm>を入れ子にしてください。次に、onclick属性を使用して<p:menuitem>というコマンドボタンを起動します。

0

confirm()をリターンなしで使用しても問題は解決しません。代わりに、確認ダイアログがキャンセルされてもフォームが送信されます。使用する前にonclickイベントを使用して回避策があるかどうかを知りたい

確認ダイアログでキャンセルボタンの値をリセットするか、ページの読み込み時に新しいデータをフェッチします。

+2

です。確認ダイアログはキャンセルボタンクリック時にイベントを発生させることができないネイティブのJavaScriptダイアログです。これはPrimeFacesコアのバグのようです。回避策として私自身の ''を作成しなければなりません。 –

0

P使用:confirmDialog:ユーザーではなく、削除を確認しかし、ときにアクションが起動されていない

<p:menuitem icon="fa fa-fw fa-remove" 
    title="#{message.global_remove}" 
    value="#{message.global_remove}" 
    onclick="PF('confirm').show();"/> 

<p:confirmDialog widgetVar="confirm" 
    message="#{message.component_list_confirm_deletion}"> 
    <p:commandButton value="Confirm" 
      oncomplete="PF('confirm').hide();" update=":component_list" 
      action="#{componentListMB.delete(cp.id)}" /> 
    <p:commandButton value="Cancel" 
      onclick="PF('confirm').hide();" /> </p:confirmDialog> 
関連する問題