我看过很多关于如何在浏览器中打开新标签/窗口的帖子。他们中的大多数人建议为按钮设置属性target = _blank
,我做了(我使用TargetFrame=_blank
)。它仍然在同一窗口/选项卡中打开链接。我也尝试过使用多种浏览器,但都给出了相同的结果。我相信它可能是Oracle 12c问题。我在{12}之前看到的_blank
推荐的大多数已接受的答案都在Oracle 12c之前。我该如何解决这个问题?
更新
按钮的来源:
<af:button text="report" id="b1"
binding="#{backingBeanScope.Backing.reportButton}"
action="#{backingBeanScope.Backing.urlConcatenatioinForReporting}"
targetFrame="_blank"
destination="#{backingBeanScope.Backing.URLToDisplayInBrowser}"
windowModalityType="modeless"
useWindow="true"/>
按钮的方法:
private String URLToDisplayInBrowser; //This has its accessors
public String urlConcatenatioinForReporting() {
String URL = "http://localhost:7101/";
String destination = URL+textToAppendToReportUrl;
setURLToDisplayInBrowser(destination);
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(URLToDisplayInBrowser);
}catch(IOException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:0)
你搞砸了整件事。
我不确定你是否真的需要绑定,但现在保留原封为action
或actionListener
是没用的,因为目标属性将被克服。
来自文档:
destinatnion - 此组件在激活时引用的URI。这是个 使用操作的替代方法,目标优先 当两者都被设定时。
useWindow
和windowModality
用于弹出窗口。
现在发生了什么,首先是来自getter的destination
按钮读取值,现在它是空的,因此禁用了destination
属性。现在action
将启用。在action
(方法urlConcatenatioinForReporting
)中,您为destination
设置属性,但现在不会被重新加载,然后强制进行外部重定向这段代码:FacesContext.getCurrentInstance().getExternalContext().redirect(URLToDisplayInBrowser);
,它将占据一席之地。因此,当您按下按钮时,您将被重定向到当前标签内的字符串URLToDisplayInBrowser
中提供的URL
那么你真正需要做的是:
<af:button text="report" id="b1"
binding="#{backingBeanScope.Backing.reportButton}"
targetFrame="_blank"
destination="#{backingBeanScope.Backing.urlToDisplayInBrowser}"/>
您的bean代码:
// note: properties names should start from lowercase
private String urlToDisplayInBrowser; //This has its accessors
public String getUrlToDisplayInBrowser(){
// FIXME: Setting it to some constant for testing purpose
urlToDisplayInBrowser = "http://www.google.com";
return urlToDisplayInBrowser;
}
现在它应该正常工作。尝试一下,然后根据需要修改bean代码。