如何在JSF或Primefaces中检查浏览器窗口是否已打开?

时间:2014-04-15 06:38:19

标签: java javascript jquery jsf primefaces

我正在使用jsfprimefaces

我有一个表单,其中我有StudentId输入文本和命令链接到新Student DetailsPop-Up命令按钮中显示Get以显示< / p>

enter image description here

我希望在点击获取按钮时实现此目的。

  • 如果弹出窗口未打开,则不要打开弹出窗口。
  • 如果弹出窗口已经打开,则使用新参数刷新该窗口。

这是我的代码:

查看页面

...//js code is below ..

<h:outputText value="StudentId :" />
        <p:inputText value="#{myController.studentId}" >
            <pe:keyFilter mask="num"/>
        </p:inputText>
    <p:commandButton value="Get" actionListener="#{myController.getStudentMarksDetails(myController.studentId)}" >

<p:commandLink onclick="openWindow('http://www.google.com','pageName')" >
        <h:outputText value="Student Info "> 
</p:commandLink>

    ...//Displays Student Marks

myController的

public Student getStudentMarksDetails(Long studentId){
     //Some Code to Get the Student Marks

    // I want to Check whether a Pop-Up already exists or not, if pop-up is opened then refresh with this url
    RequestContext.getCurrentInstance().execute("updatePopUpWindow('http://stackoverflow.com','pageName');");

}

我的JS

  var myWindow;
    //Opens in the Same window 
    function openWindow(url, name){
          myWindow = window.open(url, name,'status=no,toolbar=no,location=no,menubar=no,resizable,width=1008,height=690,scrollbars,left=100,top=50,').focus();
    }

    // To check whether a Pop-Up window is opened or not 
    //if the pop-up window with pageName is not Opened before then dont open a Pop-Up.
    //if the pop-up window is already opened, then refresh that window with new arguments.

    function updatePopUpWindow(url, name){
        if(myWindow!=null){
            if(!myWindow.closed){
                 myWindow.close();
            }
        }
     //Check the condition Here
        myWindow = window.open(url, name,'status=no,toolbar=no,location=no,menubar=no,resizable,width=1008,height=690,scrollbars,left=100,top=50,').focus();

    }

我尝试过放置此条件但没有用:

if(myWindow.name == name){
                myWindow = window.open(url, name,'status=no,toolbar=no,location=no,menubar=no,resizable,width=1008,height=690,scrollbars,left=100,top=50,').focus();
            }

我提到了许多links,但无法解决我需要的方式。

如何在JQuery中实现此问题,因为JS属性与浏览器无关

更新评论 我不能使用PF Dialog,因为我不知道外部服务链接将如何以及什么类型的数据和视图。认为我不是我传递给学生详细信息的URL的作者。

1 个答案:

答案 0 :(得分:0)

我认为可能(也可能不是)您可以使用PF Dialog。取决于您要在其中显示的页面。我使用以下示例在对话框中显示外部页面的内容:

托管bean

@ManagedBean
@ViewScoped
public class Bean {
    private String myURL;

    public Bean() {
        myURL = "http://www.stuba.sk/english.html";
    }

    public void handleUpdateDialog(){
         myURL = "http://www.stuba.sk/english/news/news.html";
    }
    //getters and setters
    ...
}

XHTML

<h:form>
    <p:commandButton value="Show Dialog" oncomplete="dlg.show();" update="dlgId"/>
    <p:commandButton value="Update Dialog" actionListener="#{bean.handleUpdateDialog}" oncomplete="dlg.show();" update="dlgId"/>

    <p:dialog id="dlgId" widgetVar="dlg">
        <iframe frameborder="0" align="left"
               src="#{bean.myURL}" id="someId" scrolling="auto"
               width="600" height="500">
        </iframe>
    </p:dialog>
</h:form>

如您所见,我在PF Dialog中使用了iframe,我可以更新(也刷新)。如果您想像这样使用它,有一些优点和缺点。对您而言,好消息是可以刷新此对话框。 然而,此解决方案的主要缺点不适用于每个外部网页,因为有很多页面由于'X而无法在框架中显示-Frame-Options'设置(例如google.com,facebook.com ...),除非您是该页面的作者,否则您不能受到影响。