5

私はこのようなjsfフェイスレットページを持っています(非常に単純化されたバージョン):

    <h:form id="frmAnagPersonName">
        <p:commandButton value="Edit" icon="ui-icon-gear" 
                         update="@form :frmEdit"
                         onsuccess="_dlgEdit.show()"/>
        ...
        <p:dataTable etc...
        ...


    </h:form>

    <p:dialog id="dlgEdit" widgetVar="_dlgEdit" dynamic="true" modal="true" closable="true"
              header="Person Identity">  
        <h:form id="frmEdit" >
            <p:panelGrid id="pnlEdit" columns="2">
                <p:outputLabel id="lblName" for="eName" value="Name"/>
                <p:inputText id="eName" value="#myBean.personName}"
            </p:panelGrid>
        </h:form>
    </p:dialog>  

ダイアログにdynamycヘッダーを配置するまでは、正常に機能します。

<p:dialog ... header="#{myBean.header}" ...  >  

その時点で、 :のupdate属性を変更する必要があります。p:commandButton

update="@form :dlgEdit"  

ただし、この場合、ダイアログはボタンを最初にクリックしたときにのみ表示されます。2回目は表示されず、その後再び表示されます...
なぜですか?ダイアログを常に表示するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

11

oncomplete属性の代わりに属性を使用してくださいonsuccess

<p:commandButton ... update="@form :dlgEdit" oncomplete="_dlgEdit.show()" />

このonsuccess属性は、ajax応答が正常に到着したときに直接呼び出されますが、ajax応答に基づいてajax更新が実行されるずっと前に呼び出されます。このoncomplete属性は、ajaxの更新が正常に完了すると呼び出されます。のタグドキュメント<p:commandButton>も参照してください。

基本的に、これはイベント呼び出しの順序です。

  • onclickハンドラーが呼び出されます
  • ajaxリクエストは、に基づくフォームデータを使用して作成されますprocess
  • onbeginハンドラーが呼び出されます
  • ajaxリクエストが送信されます
  • ajax応答が正常に取得されました(HTTPステータスコードは200です)
  • onsuccessハンドラーが呼び出されます
  • ajaxの更新は、に基づいてHTMLDOMで実行されます。update
  • oncompleteハンドラーが呼び出されます
于 2013-02-22T17:01:08.320 に答える