如何将像oncomplete这样的监听器附加到p:按钮

时间:2013-02-20 09:06:14

标签: facebook jsf-2 primefaces

我有以下代码:

<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>

我正在尝试从我的网页连接到 facebook ,通过自定义servlet来处理有关验证,解析响应等所有内容。上面的href form包含facebook authentification的url,最终将所有内容重定向到当前页面,即index.xhtml

我想要做的是在完成所有操作后调用方法,例如来自onComplete组件的<p:commandButton>属性,因为我想显示一个包含更新的托管bean的对话框,{{1} ,并欢迎。所以我需要首先转到第一个 URL ,等到autenthification结束,然后调用这个方法<p:confirmDialog>,通过解析来自facebook http响应的JSON,动态更新底层的托管bean,然后打开包含更新值的对话框。

我还尝试使用#{loginPageCode.getUserFromSession}<p:commandButton>一起使用type="button" / action / actionListener功能,但不成功。 你能给些建议么? 谢谢。

2 个答案:

答案 0 :(得分:1)

基本上,您需要在后面进行大部分处理。试试这个

  1. 定义一个preRenderView事件,您将在其中执行facebook登录的大部分后处理。此事件将在 index.xhtml 中定义。您的代码看起来像这样

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

    postFBProcessing中,您将执行从FB返回后需要执行的任何处理(处理JSON响应,从会话中获取用户等)。

  2. 在您的支持bean中定义布尔值dialogVisible并将<p:dialog/>的{​​{1}}属性绑定到变量或使用visible更新对话框。< / p>

    RequestContext

答案 1 :(得分:1)

你正在过度思考HTTP和ajax的工作方式。在同步GET请求上不可能有一个ajax oncomplete挂钩。

只需在与index.xhtml关联的请求/视图作用域的(post)构造函数中执行该作业,FB验证最终将重定向到该作用,必要时根据您在{{中指定的某些特定请求参数1}}回调网址。