Como atualizar pagina pai apos selecionar objeto no popup?[RESOLVIDO]

5 respostas
thimor

Ola, Gostaria de saber se alguem pode me ajudar.
Tenho a seguinte situacao:

public class Pedido {
    private int pedidoID;
    private Date dataPedido;
    private Fornecedor fornecedor;
    ...
}
public class Fornecedor {
    private int id;
    private String razao_social:
    ...

Na pagina JSF de montagem do pedido, abro um popup para selecionar o fornecedor. Utilizando o exemplo do http://www.jsftutorials.net/interface/jsf-popup.html, eu consigo perfeitamente setar o objeto fornecedor ao pedido e fechar o popup. O problema é que para exibir os dados do fornecedor na tela de montagem de pedido eu tenho que recarregar a pagina e é onde o bixo esta pegando…
seleciona_fornecedor.jsp (pagina popup)

<script type="text/javascript"> function update(fornecedor) { window.opener.updatePlace(fornecedor); } </script>
novo_pedido.jsp (pagina pai)

function updatePlace(fornecedor) { form=document.forms[formId]; form[formId+":fornecedorID"].value=fornecedor; winId.close(); /*ja coloquei varios tipos de *reload(); aqui mas nao deu certo. nao sei se realmente é aqui. *tentei de outras maneiras, mas essa foi a unica que funcionou direito. *porem, tenho colocar um link para recarregar a pagina para os dados aparecerem na tela. *Alguem sabe o que posso fazer? */ }

fico grato,
Thiago Moreno

5 Respostas

faelcavalcanti

thimor:
[/code]
/*ja coloquei varios tipos de *reload(); aqui mas nao deu certo. nao sei se realmente é aqui.
*tentei de outras maneiras, mas essa foi a unica que funcionou direito.
*porem, tenho colocar um link para recarregar a pagina para os dados aparecerem na tela.
*Alguem sabe o que posso fazer?
*/
}[/code]

recarregar a tela toda ? você precisa fazer alguma requisição ao fornecedor ? se não, javascript resolve o seu problema, agora não entendo o que não funcionou após este trecho, qual código você colocou ?

você pode utilizar uma requisição assincrona para efetuar algum controle em algum DOM, por exemplo utilizando o DWR ou algum recurso no JSF que desconheço para realizar este tipo de operação.

thimor

recarregar a tela toda ? você precisa fazer alguma requisição ao fornecedor ? se não, javascript resolve o seu problema, agora não entendo o que não funcionou após este trecho, qual código você colocou ?

você pode utilizar uma requisição assincrona para efetuar algum controle em algum DOM, por exemplo utilizando o DWR ou algum recurso no JSF que desconheço para realizar este tipo de operação.

Ola, o que nao funcionou foi a atualizacao da pagina. usei this.reload();, window.reload(); e usei tambem window.location.href=“novo_pedido.jsp”, etc… mas nenhum recarregou a pagina.

grato,

Thiago Moreno

faelcavalcanti

se você jogar o valor deste fornecedor em um input hidden e depois submeter o formulario na sua proxima pagina, capturando pelo java via form(camada view/controler) e recarregando com estas informações resolveria o seu problema ?

agora veja que o ideal é recarregar apenas os elementos DOM contidos no seu formulários, que como mencionei acima, a partir de uma invocação remota via javascript a partir de frameworks que se beneficiam de toda a infra-estrutura para se fazer requisição assíncrona via ajax.

procure sobre DWR ou sajax que você vai ver que é mão na roda!

thimor

faelcavalcanti:
se você jogar o valor deste fornecedor em um input hidden e depois submeter o formulario na sua proxima pagina, capturando pelo java via form(camada view/controler) e recarregando com estas informações resolveria o seu problema ?

agora veja que o ideal é recarregar apenas os elementos DOM contidos no seu formulários, que como mencionei acima, a partir de uma invocação remota via javascript a partir de frameworks que se beneficiam de toda a infra-estrutura para se fazer requisição assíncrona via ajax.

procure sobre DWR ou sajax que você vai ver que é mão na roda!

Resolveria sim. Eu pensei e vi que esta eh a melhor saida. Por esse motivo agora estou procurando como fazer o submit a partir do popup e depois fecha-lo. tipo e eu colocar o <h:commandLink action="#{pedido.setFornecedor}" value="Adicionar" onclick="window.close();" />
ele nao vai submeter e fechar a janela. Pelo que andei lendo, tenho que por algo do tipo:

window.form["myform"].submit(); window.close();

so que nao sei como faco para o submit ir direto para action pedido.setFornecedor.

thimor

Ola nao sei se essa foi a melhor solução. Mas ficou assim…
Pagina novopedido.jsp

<script>
function updatePlace(place) {
                form=document.forms[formId];
                form[formId+":fornecedorID"].value=place;
                winId.close();
                form.submit();
            }
</script>
                    ...
                    <h:panelGrid cellspacing="10" columns="3">
                        <h:outputText value="Fornecedor:"/>
                        <%-- <h:outputText rendered="#{empty pedido.pedido.fornecedorID.razaoSocial}" value="Nenhum Fornecedor" />--%>
                        <h:outputText id="razaoSocial" value="#{pedido.pedido.fornecedorID.razaoSocial}"/>                        
                        <h:inputHidden id="fornecedorID" value="#{pedido.pedido.fornecedorID}" />                        
                        <h:commandButton value="..." id="find" immediate="true" action="seleciona_fornecedor" onclick="return false" onmousedown="showPlaceList(this)">                            
                        </h:commandButton>
                    </h:panelGrid>
                    ....

e na pagina popup que é aberta ficou dessa maneira:
pagina selecionafornecedor.jsp

<script type="text/javascript">
            function update(place) {
                window.opener.updatePlace(place);
            }	
        </script>
h:outputLink title="#{item.fornecedorID}" styleClass="dcontexto" onclick="return false" onmousedown="update(this.title);">
                                <h:graphicImage url="/imagens/icones/exportar.png" width="20"/>
                                <span>Adicionar</span>
                            </h:outputLink>

Tentei fazer alguma coisa com a4j mas o javascript para de funcionar. Talvez essa nao seja a solucao mais elegante, pois ele recarrega toda a pagina quando seleciona o fornecedor por causa do form.submit(); Se alguem tiver uma solução melhor por favor pode falar.

Criado 6 de novembro de 2008
Ultima resposta 10 de nov. de 2008
Respostas 5
Participantes 2