点击<p:commandLink/>
(主要图书库)后,需要打开或重定向到多个页面。
有一个包含网址的列表。我已经尝试过了:
List<String> newUrlsList = returnNewUrlsList(oldUrl);
for (int i = 0; i < newUrlsList.size(); i++) {
//Executes the redirect for each of the elements in the list
//In every url, in the case of the method returnNewUrlsList() has encountered more than one URL
FacesContext.getCurrentInstance().getExternalContext().redirect(newUrlsList.get(i));
}
但只打开第一个网址(i = 0)。
除此之外我还尝试了如下javascript:
<a href="#" class="openPages"> Link </a>
运行:
<script type="text/javascript">
$('a.openPages').click(function (e) {
e.preventDefault();
window.open('http://www.google.com.br');
window.open('http://www.google.com.br');
window.open('http://www.google.com.br');
window.open('http://www.google.com.br');
window.open('http://www.google.com.br');
});
</script>
它可以工作,但它不是最好的方法,因为每当需要打开多个选项卡时,它会显示浏览器的弹出窗口阻止警告。
我很感激任何好的建议。
提前致谢!
答案 0 :(得分:2)
您无法从Primefaces(也没有任何其他服务器端引擎)打开多个窗口。您必须从客户端执行此操作,就像您使用Javascript一样。
如果需要,您可以使用EL表达式构建动态URL列表,但是您必须使用Javascript的window.open()
同时打开多个页面。
答案 1 :(得分:0)
正如OscarPérez建议不可能从托管bean(服务器端)打开多个选项卡。因此,我们决定显示为用户找到的页面,以便他可以决定要打开哪个页面。
所以我们在页面中放置一个对话框,显示一个包含页面名称的列表:
<p:dialog appendTo="@(body)" header="Pages" id="urls" widgetVar="dlgUrls" modal="true" showEffect="fade" hideEffect="fade" resizable="false" draggable="false">
<h:form id="formUrls">
<br/>
<p:outputLabel value="The system has encountered more than one page." style="font-size: 14px"/>
<br/>
<p:outputLabel value="Select which you wants to open:" style="font-size: 14px"/>
<br/>
<p:dataList id="dataListUrls" value="#{bean.urlsList}" var="url" type="ordered" style="font-size: 14px">
<p:commandLink value="#{url.pageName}" actionListener="#{bean.redirect(url.address)}" target="_blank" ajax="false"/>
</p:dataList>
<br/>
<br/>
<p:separator/>
<div align="center" style="background-color: #DEDEDE">
<p:commandButton value="Close" oncomplete="PF('dlgUrls').hide()" style="font-size: 14px; width: 100px"/>
</div>
</h:form>
</p:dialog>
感谢您的帮助!