webentwicklung-frage-antwort-db.com.de

p: commandLink öffnet die Seite nicht in einem neuen Fenster/Tab

Ich versuche, einen Link zu erstellen, um eine neue Seite in einem anderen Fenster/Tab zu öffnen und einige msg von der Hintergrund-Bean anzuzeigen, aber es nicht zu tun. Ich frage mich, warum?

hier ist meine Xhtml-Datei:

<html:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://Java.Sun.com/jsf/core"
  xmlns:h="http://Java.Sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:c="http://Java.Sun.com/jsp/jstl/core"
  xmlns:ui="http://Java.Sun.com/jsf/facelets">
  <h:body>
    <h:form id="form66">
    <p:commandLink actionListener="#{testing.getMessage}" action="msg.xhtml" target="_blank">get Msg</p:commandLink>
    </h:form>
  </h:body>
</html>

hier ist meine Msg.xhtml-Seite

<HTML xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://Java.Sun.com/jsf/core"
  xmlns:h="http://Java.Sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:ui="http://Java.Sun.com/jsf/facelets">
  <h:head>
    <title>testing</title>
  </h:head>
  <h:body>
    <div class="div">
      <p:panel>
        <f:facet name="header">
          testing
        </f:facet>
        <div class="paddingForPanel">
          <h:outputText value="#{testing.msg}" escape="false"/>             
        </div>
      </p:panel>            
    </div>
  </h:body>
</HTML>

hier ist mein Test. Java

public void getMessage() {      
    this.msg = "haha";
}

private String msg;
public String getMsg() {
    return msg;
}
public void setMsg(String msg) {
    this.msg = msg;
}


der obige code schlägt fehl, ein neues tab/fenster zu öffnen, ich versuche es wie unten zu tun, es ist erfolgreich, die neue seite in einem neuen tab zu öffnen, aber die msg ist leer. Ich frage mich, warum die msg in der msg.xhtml-Seite leer ist? Vielen Dank im Voraus ....

<p:commandLink actionListener="#{testing.getMessage}" oncomplete="window.open('msg.xhtml')">broadcast Msg</p:commandLink>
17
heng heng

<p:commandLink> hat einige Probleme mit Ajax, verwenden Sie stattdessen <h:commandLink>.

 <h:commandLink actionListener="#{testing.printMessage}" action="/Msg.html" target="_blank">get Msg</h:commandLink>

<p:commandLink> in <h:commandLink> geändert und Ihr Code funktioniert einwandfrei.

18
neni

Beide funktionieren nicht, also ist das Problem nicht in den Primaten ajax. Problem im Zielattribut von p: commandLink funktioniert nicht ...

<p:commandLink value="New Window" ajax="false" target="_blank" action="test"/>

<p:commandLink value="New Window" target="_blank" action="test"/>

SO müssen wir verwenden 

<h:commandLink value="New Window" target="_blank" action="test"/>
3
Az.MaYo

So mach ich es:

<p:commandLink id="link" actionListener="#{testing.getMessage}" 
    oncomplete="popupwindow('msg.xhtml', 'newwindow');" >  
    <h:outputText value="broadcast Msg" />
</p:commandLink>

Mit etwas Javascript:

<script type="text/javascript">    
function popupwindow(url, title) {      
    window.open(url , title, "toolbar=no, scrollbars=yes, resizable=yes, top=170, left=170, width=800, height=600");        
}    
</script>

In diesem Beispiel öffnen Sie ein neues Fenster, ich hoffe, es hilft!

2
CarlosLeo

Wenn Sie remotecommand verwenden, können Sie dies tun

<p:remoteCommand name="lookAndBookNewTab"
     process="@this" action="#{lookAndBookMB.onPageLoadForNewTab()}"
     rendered="#currentUserManager.
     hasPermission('LookAndBook','View')}"             update=":messageForm:growl" />

Und mein Javascript:

<script> 
    if(event.ctrlKey &amp;&amp; event.shiftKey &amp;&amp; event.keyCode == 119) {
     lookAndBookNewTab(); 
    event.preventDefault();
</script>

ServerSide-Aktionsmethode:

public String onPageLoadForNewTab(){
    HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); String url = req.getRequestURL().toString();
        url=(url.substring(0, url.length() - req.getRequestURI().length()) + req.getContextPath() + "/"); url=url+navigationpagename+".jsf"; RequestContext.getCurrentInstance().
        execute("window.open('"+url+"','_blank')");** 
    return ""; }
1
Kumar Anand

Versuchen Sie dies in Ihrem Controller-Code, es hat für mich perfekt funktioniert.

HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
            HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
            String uri = req.getRequestURI();
            res.getWriter().println("<script>window.open('" + myUrl + "','_blank', 'location=yes,height=600,width=800,scrollbars=yes,status=yes'); window.parent.location.href= '"+uri+"';</script>");
            FacesContext.getCurrentInstance().responseComplete();   
0
Pradip Dudhani