【问题标题】:JSF redirect/open multiple url from a List<String>JSF 从 List<String> 重定向/打开多个 url
【发布时间】:2018-04-18 14:02:51
【问题描述】:

点击&lt;p:commandLink/&gt;(primefaces 库的)后需要打开或重定向到多个页面。

有一个包含网址的列表。我已经试过了:

    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));
    }

但只打开第一个 URL (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>

它有效,但不是最好的方法,因为每当需要打开多个标签时,它都会显示浏览器阻止弹出窗口的警告。


如果有任何好的建议,我将不胜感激。

提前致谢!

【问题讨论】:

  • 好吧,你还是需要打开多个标签页吧?因为如果你有一个标签,你就不能将它重定向到多个 url?
  • @VeselinDavidov 是的,我们需要打开多个标签。抱歉,我没看懂第二个问题。

标签: javascript jsf primefaces


【解决方案1】:

您无法从 Primefaces(或任何其他服务器端引擎)打开多个窗口。您必须从客户端执行此操作,就像您使用 Javascript 所做的那样。

如果需要,您可以使用 EL 表达式构建动态 URL 列表,但您必须使用 Javascript 的 window.open() 才能同时打开多个页面。

【讨论】:

【解决方案2】:

正如 Oscar Pé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>

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2015-03-06
    • 2013-03-09
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多