我有以下代码:
<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
功能,但不成功。
你能给些建议么?
谢谢。
答案 0 :(得分:1)
基本上,您需要在后面进行大部分处理。试试这个
定义一个preRenderView
事件,您将在其中执行facebook登录的大部分后处理。此事件将在 index.xhtml 中定义。您的代码看起来像这样
<f:metadata>
<f:event type="preRenderView" listener="#{loginPageCode.postFBProcessing}" />
</f:metadata>
在postFBProcessing
中,您将执行从FB返回后需要执行的任何处理(处理JSON响应,从会话中获取用户等)。
在您的支持bean中定义布尔值dialogVisible
并将<p:dialog/>
的{{1}}属性绑定到变量或使用visible
更新对话框。< / p>
RequestContext
答案 1 :(得分:1)
你正在过度思考HTTP和ajax的工作方式。在同步GET请求上不可能有一个ajax oncomplete挂钩。
只需在与index.xhtml
关联的请求/视图作用域的(post)构造函数中执行该作业,FB验证最终将重定向到该作用,必要时根据您在{{中指定的某些特定请求参数1}}回调网址。