我需要完成的任务如下。我需要在向外部第三方(单点登录)发出SOAP请求后呈现一个获取其目标URL的按钮,该请求返回要登录的URL。我不希望我的页面的加载时间受限于此请求(这是我现在卡在哪里)。相反,我希望只有当我单击按钮(异步)时才会发生SOAP请求,这会将我带到新选项卡/窗口中获取的URL。我尝试了很多东西,但到目前为止,我有这个:
<p:button id="ssi" target="_blank" href="#{backbean.soaprequest}" value="button name" widgetVar="ssiButton" onclick="ssiButton.disable()" />
然而,这将等待soaprequest完成然后完成呈现页面。
我尝试过但我无处可去。
非常感谢您的帮助
答案 0 :(得分:0)
你可以这样做
按钮的
<p:commandButton value="Login"
actionListener="#{backbean.soaprequest()}"
oncomplete="handleComplete(xhr, status, args)" />
soaprequest()
public void soaprequest() {
//do your request, replace the link bellow with your login link
RequestContext context = RequestContext.getCurrentInstance();
context.addCallbackParam("url", "http://google.com");//to replace with your link
}
JS
function handleComplete(xhr, status, args) {
window.location = args.url;
}
希望这有帮助。
答案 1 :(得分:0)
在xhtml部分我有
<p:outputPanel autoUpdate="true" layout="inline">
<p:button id="ssibutton" target="_blank" href="#{backbean.link}" value="Button"/>
</p:outputPanel>
<p:remoteCommand name="soap_request"
process="@this"
update="ssibutton"
actionListener="#{backbean.url}" />
<script type="text/javascript">
$(document).ready(function() {soap_request();});
</script>
在Backbean上
private String url;
public Backbean(){
url = " ";
}
public String getLink(){
return url;
}
public void url(ActionEvent event){
//Do soap request to get url
this.url;
}