Java chamando funcao JavaScript?

27 respostas
woquiton

Pessoal

Seguinte, nao estou conseguindo chamar uma função em JavaScript.

Assim, fiz em Java:

String txtEstado = 	request.getParameter("estadosCombo");
String txtCidade = 	request.getParameter("cidadesCombo");

        System.out.println(txtEstado); //mostrou certo, suponha: "teste"

          
 try{
         if(txtEstado.equals("teste")){ 
         //também não funcionou:txtEstado.equals("")
         //Passa aqui, mas não entra no JavaScript. O codigo nao precisa
         não precisava estar aqui, mas precisa chamar uma função então
         tem algum segredo de JavaScript em JSP ??? 
%>

<SCRIPT language="JavaScript">
		
document.TheForm.cidadesCombo.disabled = true;
		
</SCRIPT>
<% ...

É claro, aqui eu tirei muita coisa, mas é basicamente isso que eu quero.

Alguém pode me ajudar? :wink:

Obrigado

27 Respostas

L

E aí woquiton, seguinte, no JavaScript, eu pelo menos não sei como recuperar dados pelo métodos GET e POST, então trabalho da seguinte maneira, que também não acho muito elegante:

  • Recupero os dados em uma variável no JSP e aí uso em conjunto com a minha função em javaScript.
    Exemplo:

String txtEstado = request.getParameter(“estadosCombo”);



function Cidade(){

var estado = <% out.println(txtEstado); %>;
íf(estado == “RS”) {

Bla, Bla,…

}

}

Se não estiver muito claro, posta que tento explicar melhor.

woquiton

Lucas

To tentando fazer isso mesmo, mas estou tentando deixar as condições… (if) em Java mesmo…

Seguinte, nao sei se já viu… tem umas consultas com combobox agora, que funciona assim… o usuario seleciona o estado, estao o combobox de cidade é liberado e faz uma consulta das cidades do estado selecionado do combo ao lado. Isso vale para o bairro também.

Então… tenho que fazer as condições em JavaScript, a parte de
document.Form.ComboTal.disabled = true nao funciona dentro do JavaScript dentro do Java. Acho que ele executa o JavaPrimeiro.

L

Seguinte, após selecionado o Estado, tu tens que submeter a página novamente. Submetida a página, tu realiza a pesquisa de cidades com o estado recuperado, monta o combo de cidades.
Exemplo:

<script language=“Javascript”>

function Cidade(){

var estado = <% out.println(strEstado); %>;
if(estado != “”){

document.form.combocidade.disabled = false;

}else{

document.form.combocidade.disabled = true;

}

}

</script>
  • Tu deves utilizar somente as variáveis do JSP na Função do JavaScript e realizar o controle todo por ele.
woquiton

Lucas

Então, acho que vc tem razão, mas o que me preocupa, é que acho que não será mantido o estado. Por exemplo.

Quando eu selecionar o estado, e submeter para a mesma pagina…
A consulta do combo de estados será feita de novo… quase certo que ele nao manterá o estado, tipo ‘SP’ no Combo (como selecionado, e os outros ainda lá, pois quando o usuario alterar (on change), chamo uma funcao JavaScript que submeterá novamente o formulario.
Isso de manter selecionado seria importante, pensei numa session, mas assim nao daria também, pois ficaria 2 SP. Um SP do session e outro SP da própria consulta…
O que acha?

L

“woquiton”:
Lucas

Então, acho que vc tem razão, mas o que me preocupa, é que acho que não será mantido o estado. Por exemplo.

Quando eu selecionar o estado, e submeter para a mesma pagina…
A consulta do combo de estados será feita de novo… quase certo que ele nao manterá o estado, tipo ‘SP’ no Combo (como selecionado, e os outros ainda lá, pois quando o usuario alterar (on change), chamo uma funcao JavaScript que submeterá novamente o formulario.
Isso de manter selecionado seria importante, pensei numa session, mas assim nao daria também, pois ficaria 2 SP. Um SP do session e outro SP da própria consulta…
O que acha?

Isso deve resolver:

<select name=“ESTADO”>

<option

<%

if(strEstado == VALOR_DO_CAMPO_DO_BD){

out.println(selected)

}

%> value=“VALOR DO CAMPO DO BD”><%VALOR DO CAMPO DO BD%></option>

</select>
woquiton

Lucas

Vou colar em prática.
Obrigado mesmo pela ajuda.
Acho que vai dar tudo certo sim.

Valeu.

[]´s

Woquiton :slight_smile:

L

Qualquer coisa, posta o fonte para darmos um olhada, ou manda por
e-mail.

Valeu :wink:

woquiton

Lucas

Só mais uma questão, como vc faz pra chamar a função JavaScript. Assim que abrir a pagina, com onLoad ??

Pergunto isso por que, as variáveis postadas, devem primeiro:

String a = request.getParameter(“blaba”);

pra depois eu enviar numa função JavaScript.

Qual a melhor forma? A questão é conseguir enviar as variáveis postadas.

[]´s

L

Isso mesmo, chama a função pelo onLoad, porque as variáveis na função JavaScript já estarão preenchidas. :wink:

woquiton

Lucas

Tá indo tudo bem, só agora que emperrou num erro de sintaxe.
Tem idéia o que pode ser??

estado é a variável de retorno do banco

if(txtEstado.equals(estado.toString())) out.println(“selected”)

L

“woquiton”:
Lucas

Tá indo tudo bem, só agora que emperrou num erro de sintaxe.
Tem idéia o que pode ser??

estado é a variável de retorno do banco

if(txtEstado.equals(estado.toString()))
out.println(“selected”)

  • O erro de sintaxe é do JavaScript ou do JSP?

if&#40;txtEstado.equals&#40;estado.toString&#40;&#41;&#41;&#41; out.println&#40;&quot;selected&quot;&#41; -- Faltou ';'

woquiton

É do JSP… :roll:

L

Verifica se não é o “;” logo após o out.println.

woquiton

Lucas

O ; eu coloquei, nao era isso. Era uma tag, desatenção minha.
Mas ele tá com problema na condição… já tentei == , .equals … .toString().equals() … e coloquei fixo, mas ainda assim ele nao funciona a condição.

:wink:

L

Coloca o pedaço do fonte onde ele gera o combo para que eu possa dar uma olhada. Por favor.

woquiton

txtEstado é a variavel do request.getParameter
estado é a do banco.
Dei um out.println nas duas, e as duas vem com valor corretamente. E iguais.

<select size=“1” name=“estadosCombo”
onchange=“javascript:changeEstado();”>

&lt;%

	try{

		EstabelecimentosAction estAction = new EstabelecimentosAction();

		ArrayList estados = estAction.getEstados();

	    Iterator iter = estados.iterator();

  %&gt;
		
		&lt;option value=""&gt;&lt;/option&gt;
		&lt;%
		
		
		while (iter.hasNext()){

			  EstabelecimentosVO  listEstados = (EstabelecimentosVO) iter.next();
	
			  String estado = listEstados.getEstado();	  

		  %&gt;
		&lt;option
			&lt;% if(txtEstado == estado){ 
			out.println("selected");} %&gt;
			value="&lt;%=estado%&gt;"&gt; &lt;%=estado%&gt;&lt;/option&gt;

		&lt;%
				}}catch(Exception e){

			  	System.out.println(e);
			  	e.printStackTrace();
		  }
		  %&gt;

	&lt;/select&gt;
woquiton

Lucas

Funcionou aqui, ao invés de txtEstado.equals, estado.equals. A variável do request, nao verificava direito a igualdade. Extranho nao é?

:slight_smile:

L

Beleza woquiton, espero que a ajuda tenha valido a pena.

Valeu carinha. :wink:

woquiton

Lucas

Claro, você me ajudou bastante.
Obrigado mesmo.

Espero poder contar mais vezes com sua ajuda, se precisar também, quem sabe eu nao saiba.

[]´s

Woquiton

woquiton

Lucas

Tudo bem?

Ontem eu terminei a consulta lá.
Seguinte, é uma pagina JSP, que chama uma classe Action, que chama um SessionBean, que por sua vez acessa um DAO e vai retornando um ArrayList. Isso para os 3 Combobox. Mas assim, eu achei um pouco despendioso… sei lá… toda nova consulta, faz as consultas anteriores.
Tipo, seleciona o estado, mostra a cidade, mas a consulta de estado é feita de novo.
O que acha?
Aproveito e te pergunto uma coisa, sei que existe um propriedade, mas nem sei qual, quando clica-se no combobox para os dados nao aparecerem por baixo do frame. No caso de Frames, existe uma propriedade que deixa down, nao sei como é isso… sabe como é?

[]´s e Obrigado pela ajuda. :wink:

L

E aí rapaz, tranquilo 8)

Seguinte, não é necessário realizar as pesquisa novamente para os outros combos que tu já pesquisou, tu pode incluir os dados em um SessionBean e sempre que for utilizar um combo diferente do já pesquisado, tu valida para não realizar a pesquisa novamente, aí tu monta os teus combos com as informações contidas no SessionBean.

Sobre o combo ficar por debaixo do Frame, eu particularmente não seto nenhuma propriedade para que o mesmo fique por cima do frame, ele faz isso sozinho, a não ser que ele esteja dentro de um layer, aí eu acho que pode dar problema. :wink:

woquiton

Lucas

Sobre o Frame o que disse era verdade. Acontece quando se usa menus DHTML, pensei que poderia acontecer o mesmo, mas não.

Sobre não realizar novamentes a consulta, deixando no SessionBean, nao sei como fazer. Não entendi muito bem. Como eu deveria fazer?

[]´s

Woquiton

L

Realmente, utilizar menus DHTML não adianta quando se tem Frames.

Vou montar um exemplo sobre o SessionBean e te envio.

woquiton

Lucas

Eu to usando Session Bean, mas só chamo um método nele. Não entendi como seria a condição pra guardar o select… ou ele faz isso sozinho?

[]´s

Woquiton

L

:frowning: Esquece o que eu falei.

  • Tive um surto e acabei me dando por conta que não é válida a idéia que tive.

  • Também estou tentando achar uma maneira de não precisar realizar a pesquisa sempre que um novo submit é realizado.

  • Pensei em armazenar em uma Session normal mas ficou meio truncado o negócio ainda. Vou continuar as minhas tentativas e assim que tiver um resultado positivo faço um novo post para compartilhar. :wink:

woquiton

Lucas

Acabei de colocar uma nova questão aqui no forum. Vc manja de Struts?

Lembra que eu fiz o 3 comboBox, e que depois que escolhido o Estado, Cidade, Bairro iria ser feito um select ? e retornar a consulta? Então… no JSP o código está todo em JSP mesmo e com aquela chamada do JavaScript pra bloquear os Combo.
O problema, é que eu queria fazer assim:

<html:form method=“POST” action=“estabelecimentosConsult.do” name=“TheForm”>

Como eu vou usar uma classe Action do Struts (que também é um servlet), chamo um método no SessionBean e depois do retorno o ArrayList e depois ela pode fazer um forward pra página que vai mostrar os dados.
Só que não funciona como acima… por que name=“TheForm”, é o nome do action form. Eu nao queria configurar no WEB.xml, apenas no struts-config … tem idéia de como eu faço? :roll:

[]´s

Woquiton

L

woquiton, faz pouco que comecei a trabalhar com JSP e tudos mais. Ainda não consegui mexer com Struts, até comprei um livro para ver se consigo tocar mais rápido o meu aprendizado.

Vou ficar te devendo esta. :frowning:

Falou!!! :wink:

Criado 28 de outubro de 2003
Ultima resposta 29 de out. de 2003
Respostas 27
Participantes 2