单击<p:button> </p:button>后,从backbean加载外部URL并重定向

时间:2013-12-19 23:45:24

标签: javascript ajax jsf soap primefaces

我需要完成的任务如下。我需要在向外部第三方(单点登录)发出SOAP请求后呈现一个获取其目标URL的按钮,该请求返回要登录的URL。我不希望我的页面的加载时间受限于此请求(这是我现在卡在哪里)。相反,我希望只有当我单击按钮(异步)时才会发生SOAP请求,这会将我带到新选项卡/窗口中获取的URL。我尝试了很多东西,但到目前为止,我有这个:

<p:button id="ssi" target="_blank" href="#{backbean.soaprequest}" value="button name" widgetVar="ssiButton" onclick="ssiButton.disable()" />

然而,这将等待soaprequest完成然后完成呈现页面。

我尝试过但我无处可去。

非常感谢您的帮助

2 个答案:

答案 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;
}