Как проверить, открыто ли окно браузера или нет в JSF или Primefaces?

0

Я использую jsf и primefaces.

У меня есть форма, в которой у меня есть входной текст StudentId и команда Link to View Student Details в новой кнопке Pop-Up и Get Command для отображения

Изображение 174551

Я хочу достичь этого, когда я нажимаю кнопку Get.

  • если всплывающее окно не открыто до этого, не открывайте всплывающее окно.
  • если всплывающее окно уже открыто, обновите это окно новыми аргументами.

Вот мой код:

Просмотр страницы :

...//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();
            }

Я ссылался на многие ссылки, но не мог решить, как мне нужно.

Как реализовать эту проблему в JQuery поскольку свойства JS независимы от браузеров

Обновленные комментарии: я не могу использовать PF-диалог, поскольку у меня нет представления о том, как и какой тип данных и вида будет получен из этой внешней ссылки службы. Думайте, что я не автор URL-адреса, который я передаю, чтобы получить информацию о студенте.

  • 1
    Вы действительно уверены, что хотите использовать всплывающие окна вместо модального диалога PF?
  • 0
    @perissf Я хочу открыть новое окно с добавленным URL-адресом studentId, который получает информацию об ученике. Я хочу, чтобы открылось новое окно браузера, а не диалог!
Показать ещё 4 комментария
Теги:
jsf
primefaces

1 ответ

0

Я думаю, что он может (а также может и не быть) в том случае, если вы можете использовать PF Dialog. Зависит от страницы, которую вы хотите показать в ней. Я использовал следующий пример для отображения содержимого внешней страницы в диалоговом окне:

Управляемый компонент

@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>

Как вы можете видеть, я использовал iframe в PF Dialog, который я могу обновить (также обновить). Есть несколько плюсов и минусов, если вы хотите использовать их так. Хорошей новостью для вас является то, что вы можете обновить этот диалог. Однако основным недостатком этого решения является то, что он не работает для каждой внешней страницы, так как есть много страниц, которые невозможно отобразить в кадре из-за настройки "X-Frame-Options" (например, google.com, facebook.com...), которые вы не можете повлиять, если вы не являетесь автором страницы.

  • 0
    Я не хочу иметь диалог PF.
  • 0
    Пожалуйста, смотрите мои обновленные комментарии

Ещё вопросы

Сообщество Overcoder
Наверх
Меню