【PrimeFaces】YesNoダイアログが開かない。(すぐ閉じる)

コマンドボタンをクリックして、YesNoダイアログを出したいが、押すとすぐに画面が閉じてかつYesの処理が実行されてしまう。

原因は二つ

  1. コマンドボタンの「ajax=”false” 」
    これは、ajax=trueもしくは未設定でOK。ファイルダウンロードを呼び出したいときにajax=falseでないといけない事象があってそれを流用したのが失敗。
  2. Yesボタンの「 onclick=”#{salesSummaryController.deleteRow()}”」
    これはactionListenerに設定しなければいけない模様。

<p:commandButton id=”deleteButton” icon=”ui-icon-trash” value=”選択行を削除”
onclick=”PF(‘dlgYesNo’).show();”
ajax=”false”
disabled=”#{empty salesSummaryController.selectedItem}”/>
<p:dialog widgetVar=”dlgYesNo”>
<p:outputLabel value=”選択行を削除します。よろしいですか?”/>
<br/>
<p:commandButton id=”cmdyes” value=”はい”
onclick=”#{salesSummaryController.deleteRow()}”
oncomplete=”PF(‘dlgYesNo’).hide()” styleClass=”ui-confirmdialog-yes” update=”:messages,:SalesSummaryListForm” />
<p:commandButton id=”cmdno” value=”いいえ” oncomplete=”PF(‘dlgYesNo’).hide()” update=”:SalesSummaryListForm” styleClass=”ui-confirmdialog-no” />
</p:dialog>

 

<p:commandButton id=”deleteButton” icon=”ui-icon-trash” value=”選択行を削除”
onclick=”PF(‘dlgYesNo’).show();”
disabled=”#{empty salesSummaryController.selectedItem}”/>
<p:dialog widgetVar=”dlgYesNo”>
<p:outputLabel value=”選択行を削除します。よろしいですか?”/>
<br/>
<p:commandButton id=”cmdyes” value=”はい”
actionListener=”#{salesSummaryController.deleteRow()}”
oncomplete=”PF(‘dlgYesNo’).hide()” styleClass=”ui-confirmdialog-yes” update=”:messages,:SalesSummaryListForm” />
<p:commandButton id=”cmdno” value=”いいえ” oncomplete=”PF(‘dlgYesNo’).hide()” update=”:SalesSummaryListForm” styleClass=”ui-confirmdialog-no” />
</p:dialog>

PrimeFacesのファイルダウンロード機能利用時の注意

Primefacesでファイルダウンロードボタンクリック時にダイアログが開かなかった。

<p:commandButton id="buttonDownload" actionListener="#{testController.download()}" ajax="true"
value="ダウンロードのみ" update=":Form">
<p:fileDownload id="dl" value="#{testController.downloadContent}"/>
</p:commandButton>

 

いろいろいじったところ、ボタンのajaxが有効な場合、ダイアログが開かない模様。

<p:commandButton id="buttonDownload" actionListener="#{testController.download()}" <strong>ajax="false"</strong>
value="ダウンロードのみ" update=":Form">
<p:fileDownload id="dl" value="#{testController.downloadContent}"/>
</p:commandButton>

 

これで開くようになりました。