web-dev-qa-db-fra.com

p: commandLink ne parvient pas à ouvrir la page dans une nouvelle fenêtre/onglet

J'essaie de créer un lien pour ouvrir une nouvelle page dans une autre fenêtre/onglet et afficher quelques msg de bean sauvegarde mais ne pas le faire, je me demande bien pourquoi?

voici mon fichier xhtml:

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

voici ma page Msg.xhtml

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

voici mes tests.Java

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

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


le code ci-dessus ne parvient pas à ouvrir un nouvel onglet/fenêtre, j'essaie de faire comme ci-dessous, il réussit à ouvrir la nouvelle page dans un nouvel onglet mais le msg est vide, lorsque je débogue, il a le succès, appelez listenner getMessage, Je me demande pourquoi le msg est vide dans la page msg.xhtml? Merci d’avance ....

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

<p:commandLink> a quelques problèmes ajax, utilisez plutôt <h:commandLink>.

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

changé <p:commandLink> en <h:commandLink> et votre code fonctionne bien.

18
neni

Les deux ne fonctionnent pas, donc le problème ne se trouve pas dans le fichier primefaces ajax. Problème dans l'attribut target de p: commandLink ça ne marche pas ...

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

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

Nous devons donc utiliser 

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

Je le fais comme ça:

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

Avec du 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>

Dans cet exemple, vous ouvrez une nouvelle fenêtre, en espérant que cela vous aidera!

2
CarlosLeo

Si vous utilisez remotecommand, vous pouvez le faire comme ceci

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

Et mon javascript:

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

Méthode d'action ServerSide:

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

Essayez ceci dans votre code de contrôleur, cela a parfaitement fonctionné pour moi.

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