JSF重定向/从List <string>打开多个url

时间:2018-04-18 14:02:51

标签: javascript jsf primefaces

点击<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>

它可以工作,但它不是最好的方法,因为每当需要打开多个选项卡时,它会显示浏览器的弹出窗口阻止警告。

我很感激任何好的建议。

提前致谢!

2 个答案:

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

感谢您的帮助!