Passar valores de um formulário para outro em páginas diferentes

Amigos boa tarde,

Tenho o script abaixo dentro da tag display:column do displaytag que joga os valores de um formulario para outro em diferentes janelas.

<display:column media="html" title="Selecionar">   
<a href="Javascript: void(0);" onclick="send('${lCliente.nomeFantasia}');">${lCliente.nomeFantasia}</a>   
</display:column>  

Estou com uma dúvida. Existe uma página com um formulário de pedido (pagina mãe), para preencher os campos do Header do formulário (nome cliente, endereço, estado, etc), coloquei um link na qual abre um popup onde o usuário pode procurar por um determinado cliente e quando ele clicar no nome do cliente (conforme evento onclick do código acima), os campos do formulario de pedido são preenchidos automaticamente.

Para teste, estou testando somente com um campo (nome fantasia), agora estou conseguindo passar o atributo nome fantasia para dentro da função send, mas não consigo fazer com que o nome fantasia apareça no campo correspondente da pagina “mãe”, não aparece nada. O que pode ser?

Abaixo segue o JS que utilizo na pagina popup para jogar os valores para a pagina mãe. Não aperece nenhum erro, simplesmente não aparece o nome fantasia no input da pagina mãe.

<script>
<!--   
function send(nomeFantasia){   
window.opener.document.pedidoForm.nomeFantasia.value=nomeFantasia;   
self.close();   
}   
//-->   
</script>  

Abaixo é o campo input da pagina mãe:

<html:text property="nomeFantasia" size="50" styleClass="text" readonly="true"/>

Vlw amigo…

Cara, primeiro:

Voce já pensou em começar a usar jQuery? Se não comece a pensar sobre isso!!

segundo:
vamos debugar seu código, tente um


&lt;script&gt;
	
	function send(nomeFantasia){     
		
		alert(nomeFantasia);

		opener.document.pedidoForm.nomeFantasia.value=nomeFantasia;

		alert(opener);

		self.close();     
	}     

&lt;/script&gt;

e verifique se o nomeFantasia está chegando, o segundo alert é para verificar se o browser ainda tem a referência para a janela opener (não precisa do window.)

aguardo sua resposta.

PS: com jQuery ficaria assim

$("input[name=nomeFantasia]").val(nomeFantasia);

Simples, não?

Coloque os nomes e as propriedades completas dos campos dos formularios

 //campo de destino                                           //campo de origem
 window.opener.frmDadosCliente.txtRua.value = document.frmCep.txtRuaCep.value;  

Amigo thiagoh, já ouvi falar no JQuery sim e também já pensei em implementar ao projeto java que estou desenvolvendo, mas não sei como implementa-lo no eclipse para usar com o java. Você seba como posso implementar o JQuery no eclipse usando java?

Vou testar as sugestões de vocês e depois respondo…

Vlw…

Amigo thiagoh,

Fiz o teste que vc me pediu colocando alert(nomeFantasia); na função e o valor ta chegando certinho, este teste já havia feito com sucesso.

Agora o teste alert(opener); tá exibindo o valor [object] no alert, ou seja, acho que está perdendo a referencia da janela “mãe”.

O que pode estar acontecendo para perder essa referencia(objeto) amigo? na verdade não sei qual objeto que é usado quando clico na link da pagina mãe, como posso saber?

Abaixo segue o codigo do link e a respectiva função que coloquei na janela mãe para abrir o popup:

<a href="#" onclick="remote()"><img src="imagens/jpg/lupa.jpg" title="Selecionar cliente" border="0"/></a>

Função remote:

<script language="javascript">

function remote(){
win=window.open("<c:url value="/pesqCliente.do"/>","","width=800,height=300,scrollbars=no,status=yes")

text = "Popup bloqueado!";
if(win == null) { alert(text); return; }
win.moveTo(400,150);

}
//-->
</script>

Obrigado…

Verifique tambem se não há dois campos nesse mesmo form com esse mesmo nome: “nomeFantasia”.

Amigo info_god,

Fiz o teste que vc me pediu e o valor (nome Fantasia) apareceu no alert. Agora este valor só não aparece no campo input do formulário na pagina mãe. O que pode ser? já verifiquei e não tem nomes repetidos de campos neste formulário. O que posso fazer?

Tem também um outro porém, na verdade o nome do campo no formulário da pagina mãe é cliente.nomeFantasia, mas se eu colocar este nome no JS, dá error, ai pra teste eu tenho um outro campo que só é composto por um nome pra testar, mas ai não passa o valor, conforme informei aqui neste post. Como faço pra colocar o nome cliente.nomeFantasia no JS e não dá error?

Assim não dá error, mas não passa o valor para o campo do formulário na pagina mãe:

<script>
<!--
function send(nomeFantasia){
	opener.document.pedidoForm.data_pedido.value=nomeFantasia;
	alert(opener.document.pedidoForm.data_pedido.value);
	//self.close();
}
//-->
</script>

Assim dá erro, usando o nome cliente.nomeFantasia:

<script>
<!--
function send(nomeFantasia){
	opener.document.pedidoForm.cliente.nomeFantasia.value=nomeFantasia;
	alert(opener.document.pedidoForm.cliente.nomeFantasia.value);
	//self.close();
}
//-->
</script>

Obrigado.

Qual é o tipo de campo esse nomeFantazia?

O campo cliente.nomeFantasia no VO é String e no banco Varchar. O campo(data_pedido) que estou testanto tb é String no VO.

Amigos,

Consegui resolver. Fiz o seguinte, coloquei um id (styleId=“nomeFantasia”) no campo html:input do formulario da pagina mae e na funçao JS fiz assim:

window.opener.document.getElementById('nomeFantasia').value=nomeFantasia;

Funfou certinho, consegui passar o valor nomeFantasia para o campo desejado. Mas agora surgiu outra dúvida, para efeito de teste so passei um parametro, que é o nomeFantasia, mas na verdade necessito de passar mais 4 parametros (Endereço, Bairro, Cidade e Estado) que estão populando o objeto java chamado de lCliente. Como posso passar mais estes 4 parametros para dentro da função javascript? Existe a possibilidade de passar o objeto (lCliente) java que está populado para dentro do JS ?

Vlw amigos…

Muito obrigado…

Igor,

A questão do alert(opener) esta mostrando [object] esta correto, portanto pra verificar se o valor esta sendo mantido altere seu alert para alert(opener.document.pedidoForm.nomeFantasia.value) pois aqui vc referencia o objeto inteiro até seu valor.