2016-08-02 35 views
1

Ich habe ein Hauptfenster (window1), ein zweites Fenster (window2), das von window.open() von einer verwalteten Bean und einer verwalteten Bean (Controller) geöffnet wurde.Wie wird das Hauptfenster von einer Methode in einer verwalteten Bean, die von einem anderen Fenster ausgelöst wird, aktualisiert (umgeleitet)?

window2 löst eine Methode in der Steuerung aus. Wenn eine bestimmte Bedingung erfüllt ist, sollte der Controller window2 schließen und die Seite von /test/page1.xhtml in /test/page2.xhtml in window1 ändern.

Das Verfahren in der Steuerung sieht wie folgt aus:

String result = model.doSomething(); 

if (result.matches("[0-9]+")) { 

    RequestContext.getCurrentInstance().execute("window.close()"); 

    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 

    try { 
     FacesContext.getCurrentInstance().getExternalContext().redirect(request.getContextPath() + "/test/page1.xhtml"); 
    } catch (IOException e) { 
     MessageHelper.showMessage(null, e.getMessage(), FacesMessage.SEVERITY_ERROR, this); 
    } 
} 

Das Problem ist die Linie HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();, denke ich. Ich habe keine Ahnung, wie man window1 anweist, die Seite vom Controller sofort nach dem Schließen von window2 zu ändern. Die Lösung muss unter IE 11 arbeiten. Ich benutze Primefaces 5.2 und JSF 2.0.

Antwort

0

Dies kann einfach mit JavaScript erfolgen. Füge einfach window.opener.document.location = '{yourlocation}'; vor window.close() hinzu. Also:

RequestContext.getCurrentInstance().execute(
    "window.opener.document.location = '"+ request.getContextPath() +"/test/page1.xhtml';"+ 
    "window.close()" 
); 

Siehe auch:

+0

Ihnen sehr danken. Funktioniert perfekt. –