0

私は次のコードを持っています:

<h:form id="facebookForm">
    <p:button value="Facebook Connect" href="#{loginPageCode.facebookUrlAuth}">  
          <p:ajax event="click" listener="#{loginPageCode.getUserFromSession}" update="growl confirmDialog" ></p:ajax>
    </p:button>

    <p:confirmDialog id="confirmDialog" message="Welcome"
                        header="Welcome to our website!" severity="alert" widgetVar="confirmation">
         <h:panelGrid columns="1" cellpadding="10">
                            <h:outputText id="msg" value="Salutation : #{user.salutation}" />
                            <h:outputText id="msg1" value="Name and surname: #{user.name} #{user.surname}" />
                            <h:outputText id="msg2" value="Birthday : #{user.birthDate}" />
                            <h:outputText id="msg3" value="Email : #{user.email}" />
                            <h:outputText id="msg4" value="Postal code : #{user.postalCode}" />
                            <h:outputText id="msg5" value="Phone nr : #{user.phoneNumber}" />
         </h:panelGrid>
         <p:commandButton id="confirmation" value="Ok" onclick="confirmation.hide()" type="button" />
    </p:confirmDialog>

    <p:growl id="growl" life="3000" showDetail="true" />

</h:form>

検証、応答の解析などに関するすべてのものを処理するカスタムを介して、自分のWebページからFacebookに接続しようとしています。上記のフォームの内側には、Facebook認証へのURLが含まれており、最終的にすべてを現在のページにリダイレクトします。です。servlethrefindex.xhtml

私がやりたいのは、すべてが完了した後にメソッドを呼び出すことです。これはonComplete、コンポーネントの属性のようなものです。<p:commandButton>更新されたマネージドBeanのダイアログを表示し、<p:confirmDialog>ようこそ。したがって、最初に最初のURLに移動し、自動化が完了するまで待って#{loginPageCode.getUserFromSession}から、Facebook http応答からJSONを解析して内部で管理対象Beanを動的に更新するこのメソッドを呼び出し、更新された値を含むダイアログを開く必要があります。

//機能を使用するため<p:commandButton>にも使用しようとしましたが、失敗しました。あなたがアドバイスしていただけますか?ありがとうございました。type="button"actionactionListenerupdate

4

2 に答える 2

1

HTTP と ajax が一般的にどのように機能するかを考えすぎているか、誤解しています。同期 GET リクエストで ajax oncomplete フックを使用することはできません。

必要に応じて、コールバック URLindex.xhtmlで指定した特定のリクエスト パラメータに基づいて、FB 認証が最終的にリダイレクトする、関連付けられたリクエスト/ビュー スコープの (ポスト) コンストラクタでジョブを実行します。index.xhtml

于 2013-02-23T13:05:23.883 に答える
1

基本的に、ほとんどの処理は後ろで行う必要があります。これを試して

  1. Facebook ログインの後処理のほとんどを行うイベントを定義しpreRenderViewます。このイベントはindex.xhtmlで定義されます。コードは次のようになります

    <f:metadata>
      <f:event type="preRenderView" listener="#{loginPageCode.postFBProcessing}" />
    </f:metadata>
    

    ではpostFBProcessing、FB から戻った後に必要なすべての処理 (JSON 応答の処理、セッションからのユーザーの取得など) を実行します。

  2. dialogVisibleバッキング Bean でブール値を定義し、<p:dialog/>visibleプロパティを変数にバインドするRequestContextか、ダイアログを更新するために使用します。

    <p:confirmDialog id="confirmDialog" message="Welcome" visible="#{loginPageCode.isDialogVisible}" header="Welcome to our website!" severity="alert" widgetVar="confirmation">
    
于 2013-02-20T13:18:10.050 に答える