0

削除確認ダイアログがあります:

  <p:confirmDialog id="deleteConfirmDialog"
    header="#{i18n['confirm-deletion']}"
    widgetVar="pnp_delete_confirmDialog" closeable="false"
    appendToBody="true">
    <f:facet name="message">
      <h:outputFormat id="deleteConfirmMessage"
        value="#{i18n['confirm-subscription-deletion']}">
        <f:param value="#{subscriptions.deleteSelected.title}" />
      </h:outputFormat>
    </f:facet>
    <h:form id="pnpConfirmDeleteForm">
      <p:commandButton id="deleteActionConfirmed"
        action="#{subscriptions.delete}" value="#{i18n['delete']}"
        type="button" process="@this" update=":pnpEditForm :pnpExistingForm"
        oncomplete="pnp_delete_confirmDialog.hide()" />
      <p:commandLink id="deleteActionConfirmedLink"
        action="#{subscriptions.delete}" process="@this"
        update=":pnpEditForm :pnpExistingForm"
        oncomplete="pnp_delete_confirmDialog.hide()">#{i18n['delete']}</p:commandLink>
      <p:commandButton id="deleteActionCancelled" value="#{i18n['cancel']}"
        type="button" onclick="pnp_delete_confirmDialog.hide()" />
    </h:form>
  </p:confirmDialog>

deleteActionConfirmedボタンとdeleteActionConfirmedLinkリンクの action、process、update、および oncomplete 属性がまったく同じであることがわかります。ただし、リンクは期待どおりに機能し、ボタンは何もしません。生成されたマークアップを見る:

<form enctype="application/x-www-form-urlencoded"
  action="/primefaces-quickstart/xhtml/pnp-configuration.xhtml" method="post"
  name="pnpConfirmDeleteForm" id="pnpConfirmDeleteForm">
  <input type="hidden" value="pnpConfirmDeleteForm" name="pnpConfirmDeleteForm">
  <button type="button"
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
    name="pnpConfirmDeleteForm:deleteActionConfirmed"
    id="pnpConfirmDeleteForm:deleteActionConfirmed" role="button"
    aria-disabled="false">
    <span class="ui-button-text">Delete</span>
  </button>
  <a
    onclick="PrimeFaces.ab({source:'pnpConfirmDeleteForm:deleteActionConfirmedLink',process:'pnpConfirmDeleteForm:deleteActionConfirmedLink',update:'pnpEditForm pnpExistingForm',oncomplete:function(xhr,status,args){pnp_delete_confirmDialog.hide();}});return false;"
    class="ui-commandlink" href="#"
    id="pnpConfirmDeleteForm:deleteActionConfirmedLink">Delete</a>
  <button type="button" onclick="pnp_delete_confirmDialog.hide();"
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
    name="pnpConfirmDeleteForm:deleteActionCancelled"
    id="pnpConfirmDeleteForm:deleteActionCancelled" role="button"
    aria-disabled="false">
    <span class="ui-button-text">Cancel</span>
  </button>
  <input type="hidden" autocomplete="off"
    value="7076449462381240234:-2976764560029615800" id="javax.faces.ViewState"
    name="javax.faces.ViewState">
</form>

リンクにはあるのに、ボタンには onclick が生成されていないことがわかります。何か足りないのですか、それともプライムフェイスのバグですか? バグの場合、スタイル付きのリンクを使用してボタンのように見せる以外に回避策はありますか?

Tomcat 6.0.32(サーブレット2.5、el 2.1)でprimefaces 3.4.2でmojarra 2.1.14を使用しています。

4

1 に答える 1

3

うーん...単純な間違いです。の type 属性によって動作がp:commandButton決まります。設定することでtype='button'、(primefacesユーザーガイドから取得した)に変えたようです:

ボタンを押す

プッシュ ボタンは、ajax/非 ajax リクエストを発生させずにカスタム JavaScript を実行するために使用されます。プッシュ ボタン セット タイプを「ボタン」として作成します。

<p:commandButton type="button" value="Alert" onclick="alert(‘Prime’)" />

送信するタイプを切り替えると、この問題が修正されました。教訓... ボタンを使用する場合type='button'、コンポーネントはサーバー側を無視しますaction

于 2013-01-04T19:29:22.057 に答える