JSF - Cenário quase impossível de resolver

19 respostas
neeryck

Srs.
Esse cenário é enviar dados para uma popup exceto pela URL (GET)… o usuário clica no botão e envio os dados para uma popup chamada através do window.open().
Tendo em vista que são dois request’s distintos, é um tremendo desafio!!

a4j:keepAlive ? Não deu certo!
Session ? Nem precisa falar o pq!
Facelet’s ? Não há nesse projeto.

Lembrando que por motivos intrínsecos ao resultado final, existe um pequeno trecho de java na JSP… é isso mesmo, um “horrível” mais necessário scriplet =D

Alguém passou por isso, ou sabe ajudar Srs???

[]'s

19 Respostas

thiagocg

Você não pode substituir seu popup por um rich:modalPanel ???

[]'s

neeryck

Tentei isso hoje meu brother…
Mais infelismente não dá certo. Primeiro que temos outro modalPanel (genérico) Que captura todas as msgs no context e é exibido de acordo com a respectiva Serverity e esse mesmo modal dá conflito para ser fechado com outro modalPanel incluso…mais isso é uma outra história rs
O fato é que utilizamos muito o modalPanel do richfaces, mas para essa necessidade não dá!

Agradeço muito sua sugestão e intenção!

[]'s

P

Já tentou isso?
http://www.guj.com.br/posts/list/116393.java

neeryck

plic_ploc:
Já tentou isso?
http://www.guj.com.br/posts/list/116393.java

Desculpa! Mas eu não entendi como passarei os parâmetros para a popup dessa forma?!?
Mais é um cenário teoricamente idêntico ao meu rs

[]'s

P

Se o botão estiver dentro de um form, adicione esses dados ao form. Se não, coloque o botão dentro de um form com esses dados.

neeryck

E como eu posso obter esses dados na popup/scriplet??
Olhando no filtro, tenho receio que continue sendo dois request’s distintos e não consigo obter os dados!
Por isso a pergunta.

Muito obrigado novamente!

[]'s

P

Não são dois requests! Quando você faz um post e omite o target, o resultado do post é exibido na janela que o enviou. Se informado, o resultado é exibido na janela informada e a janela que o enviou não é atualizada.

neeryck

Excelente! Mais uma que aprendo! rs
Mais como eu pego esses dados na popup??
COnsiderando que é um POST, tentei pelo request.getParameter, mas sem sucesso!!

[]'s

neeryck

Tenho uma dúvida…
Se não são dois request’s porque que quando eu faço isso:

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("teste","123")// No bean

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("teste")// Na popup

O resultado disso é null, quando deveria ser “123” ???

[]'s

neeryck

Acho que fiz besteira rs
Olhe a manobra:

Quando o usuário clica no h:commandButton no action dele coloco o método do bean. Nesse método é feito uma série de verificações de acordo com as regras de negócio!
Aí que vem o POG rs
No meu bean eu seto um valor no hidden da página, e no onload da página eu chamo uma function que verifica o valor desse hidden para só então fazer isso que vc me sugeriu rs ou seja, não há POST rsrs
Agora que descobri isso, surge outra dúvida…
Dá pra continuar com essa linha de raciocínio que estamos agora, vindo de uma validação do bean???

Desculpe meu equivoco plic_ploc !
Ficarei muito agradecido se poder continuar me ajudando!! Está sendo de grande valia !

[]'s

P

Você está usando <h:form/>?
Se sim, informe a id ( <h:form id=“fr” …> ) e no getParameter inclua “fr:”.

Ex:
pagina:

<h:form id="fr">
  <h:inputText id="nome" />
</h:form>

servlet:

String name = request.getParameter( "fr:nome" );
neeryck

Então… mudei o código p testar, fiz exatamente como vc sugeriu mas o valor do meu h:inputText não é obtido na popup :
request.getParameter(“idForm:idInput”).

Claro que para popup ao menos ser exibida, tive que “ingessar” os valores dentro dela!

Só que os print’s dos request.getParameter são null

[]'s

P

Sem o trecho do código que envia os dados e o do que exibi fica difícil visualizar o problema!

neeryck

Legal!

function exibirPopup(){
               
             //  var exibirPopup= document.getElementById('form1:exibirPopup');
               
           //    if(exibirPopup.value == "true"){
	               
	               document.forms[0].target="minhaPopup.jsf";//Como sugeriu
	               var features = "height=600,width=800,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no,directories=no";
	               window.open('minhaPopup.jsf',features);
	                         
	         //      exibirPopup.value = "";     
            //   }                       
           }


&lt;body&gt;

&lt;f:view&gt;
    
    &lt;h:form id="form1" &gt;
    
        &lt;h:inputHidden id="exibirPopup" value="true"/&gt;
        &lt;rich:panel id="menuPanel"&gt;
               &lt;table border="0" cellpadding="0" cellspacing="2"&gt;

                                                &lt;tr&gt;
                                                    &lt;td align="right"&gt;
                                                        &lt;h:outputLabel value="parametroUsuario" for="parametroUsuario"/&gt;
                                                    &lt;/td&gt;
                                                    &lt;td&gt;
                                                        &lt;h:inputText id="parametroUsuario" value="#{meuBean.parametroUsuario}" /&gt;
                                                    &lt;/td&gt;
                                                &lt;/tr&gt;


//....
                                                   &lt;t:commandButton value="Popup" onclick="exibirPopup()" title="Popup"/&gt;


///....

/**************************************************************************/

//popup/scriplet

....
    
    System.out.println("-&gt;&gt;&gt;&gt; "+request.getParameter("form1:parametroUsuario"));

.....

null

É exatamente isso!!
Muito obrigado pela atenção e paciência!

[]'s

P

troque as linhas 07 até 09 por:

document.forms[0].target="jan";
                   var features = "height=600,width=800,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no,directories=no";  
                   window.open('', 'jan', features);
neeryck

Estou na Principal.jsf

document.forms[0].target="MinhaPopup.jsf";  
    	var features = "height=600,width=800,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no,directories=no";    
     	window.open('', 'MinhaPopup.jsf', features);

Ele abre a Principal.jsf em uma nova guia e não a MinhaPopup.jsf !!

A sugestão é essa mesmo brother?

[]'s

P

Agora você terá que usar o

Exemplo:

Página principal (welcomeJSF.jsp):

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%--
    This file is an entry point for JavaServer Faces application.
--%>
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
            <script>
                function check( f ){
                    if( f.elements['fr:popup'].checked ){
                        f.target="jan";
                        var features = "height=600,width=800,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no,directories=no";
                        window.open('','jan',features);
                    }
                    else{
                        f.target = '';
                    }
                }
            </script>
        </head>
        <body>
            <h1><h:outputText value="JavaServer Faces"/></h1>
            <h:form id="fr">
                <h:selectBooleanCheckbox id="popup"/>
                <h:commandButton action="#{bean.myAction}" onclick="javascript:check(this.form)" value="result"/>
            </h:form>
        </body>
    </html>
</f:view>

Página contendo o resultado (result.jsp):

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%--
    This file is an entry point for JavaServer Faces application.
--%>
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h1><h:outputText value="Resultado"/></h1>
        </body>
    </html>
</f:view>

Bean:

package beans;

public class Bean {

    public String myAction(){
        ...
        return "result";
    }
}

faces-config.xml:

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
  <managed-bean-name>bean</managed-bean-name>
  <managed-bean-class>beans.Bean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
    <navigation-rule>
        <from-view-id>/welcomeJSF.jsp</from-view-id>
        <navigation-case>
            <from-outcome>result</from-outcome>
            <to-view-id>/result.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>
neeryck

Voilà plic_ploc

Quero agradecê-lo pela paciência e boa vontade!! Realmente vc estava certo desde o princípio.
Depois de vários fóruns e googladas está resolvido!! Agora só para eu colocar esse tópico na lista dos “Melhores tópicos do GUJ” poderia nos dizer um pouco mais sobre isso:

plic_ploc:
Não são dois requests! Quando você faz um post e omite o target, o resultado do post é exibido na janela que o enviou. Se informado, o resultado é exibido na janela informada e a janela que o enviou não é atualizada.

Eu queria entender o porque a URL permanece a mesma (welcomeJSF.jsp) mesmo na popup?
O redirecionamento (configurado no faces-config) é feito pelo JSF depois que a popup é aberta??

[]'s

neeryck

`

Criado 21 de maio de 2010
Ultima resposta 24 de mai. de 2010
Respostas 19
Participantes 3