JSP + HTML(Selects)

13 respostas
D

Ola pessoal , gostaria de obter uma informacao…

Qual a melhor forma de fazer o seguinte :

Tenho em uma pagina JSP , com:

(Nome) : < INPUT TEXT1 > 
(Idade) : < INPUT TEXT2  >
(Telefone) :< INPUT TEXT3 >

(patologia) :  < COMBOBOX 1(select) >
(doença)    :  < COMBOBOX 2(select) >

Eu preciso , quando o usuario escolher a opcao “PATOLOGIA” , no “combobox 1” , que no “combobox 2” , seja carregado automaticamente as doenças relacionadas ao “combobox 1”…sem perder o valor dos dados acima…


[b]Obs : sendo que as doencas irao ser recuperadas do banco…

Acho que a aqui o problema principal , seria nao perder as informacoes anteriores(INPUT TEXTS…)…

Qual seria a ideia aqui…seria de que quando ele obtivesse os dados(doenças) , ele voltasse para a página “antiga”, ou uma nova pagina e contruída com os novos dados ???

Qual a melhor forma de fazer isso…??[/b]

muito obrigado pessoal!
Bom trabalho a todos!!

13 Respostas

R

Duque, existem várias soluções para este problema. Sabendo de como vc esta trabalhando, se usa algum framework MVC etc, minha resposta poderia ser mais específica. Como não tenho essas informações, vou mandar uma dica bem simples e me baseando que vc esta trabalhando com jsp + javabeans.

No onChange do COMBOBOX de patologia coloque um javascript para submeter a página para ela mesmo, e recupere nos combos os valores, assim vc continua com os valores submetidos e o seu javabeans faria a consulta no banco e recuperaria as doenças gerando o novo combobox.

D

Deixa ver se eu entendi…

<script>

re-submissao da pagina

request.getParameter()…(dos campos acima do da patologia…)

</script>

[b]Para consulta no banco…:

faço um request.getParameter() para pegar a patologia e passo como parametro para o metodo que irá se encarregar de trazer as doenças relacionadas… OK ???

E aonde eu chamaria o meu metodo para consultar no banco ???Dentro do javaScript ???[/b]

Obrigado! :lol:

[b]OBS : é nesta aplicacao…estou utulizando beans…mas estou pensando seriamente em mudar toda a arquitetura da minha aplicacao…(estou estudando struts…)

Mas ja adiantando…como seria feito se isso estivesse na fomra MVC 2 ?[/b]

Abraço…

R

Acho que vc não entendeu direito.

Não, de maneira alguma, isso será feito por suas classes java responsáveis por isso e acessadas pelo javaBean.

O papel do java Srcipt é simplesmente de fazer redirecionamento.

O request.getParameter() dos campos vc vai pegar e preencher os campos, e tb não tem nada de colocar ele entre as tags <script></script>.

Bem quanto ao exemplo com Struts, no seu onChange do javascript a função iria redirecionar para uma action que setaria os atributos no escopo de página e mandaria novamente para sua página de formulário.

Caso suas views forem feitas em jsp use as tags de <html:form>,<html:text> e <html:select> do Struts.

Veja como usar a tag <html:select> no tópico:

http://www.guj.com.br/forum/viewtopic.php?t=3256

D

Ta , beleza…mas me diga uma coisa…

1 - entaum eu coloco os request…no inicio da página sem javascript…
…OK ??(Mas dai na primeira vez que eu caisse na página nao iria aparecer null nos campos ??? )

Dai no evento onCHange do Combo(Patologia…) , eu teria um javascript que redirecionaria minha página para um servlet por exemplo que recuperaria minhas doenças OK ???(Mas dai eu nao vou perder os valores ??)

POrque pelo queeu entendi…ficaria assim :

1 - a página é aberta…( ja será testado os requests…com serao nulos…aparecerá null nos campos…)

2 - escolho patologia…(onChange é ativado…)
2.1 - o evento dentro do javascript será executado…submetendo a página novamente…dai os valores serao guardados…beleza…

2.2 - dai eu redirecionaria para um servlet..que recuperaria os valores...

3 - dai eu teria que voltar para a pagina…dai como eu faria para nao perder os valores???

Cara eu nao sei se eu entendi…to começando a programar para web agora…

Abraço e obrigado pela ajuda…

R

Vamos resolver isso com uma solução bem simples:

Faz o seguinte coloca o resultado do request.getParameter() nos values dos inputs de texto fazendo um if básico.
(issa não é uma maneira elegante, mais resolve seu problema e é simples para vc entender)

&lt;%
String valor = request.getParameter&#40;"valor"&#41;;
%&gt;
&lt;input type="text" name="nomedocampo" value="&lt;%out.print&#40;valor == null ? "" &#58; valor&#41;%&gt;"&gt;

Manda para a mesma página que fica tudo resolvido e use um javaBean para recuperar os dados, caso vc mande para o servlet, lá vc recupera os dados e seta no escopo da página.

D

cara…agora eu so nao entendi como eu retorno para a “pagina anterior” sem perder os valores que eu ja tinha…isso eu ainda nao consegui entender…

abraço!

A

Fala cara beleza!!!
na verdade vc pode criar um servlet aonde primeiramente vc não passa nenhum parametro então vc carrega os dados default, quando o cara mudar o combo, vc precisara incluir no onChange do combo em…
Vc coloca um submit para um servlet ou mesma pagina so que setando um parametro, ai vc pega este parametro e sabe que tem que carregar o combo x.
Outra maneira muito boa é usando iframe…
Ja usou isso??
Bem iframe é como se fosse um frame aonde vc define uma pagina blank inicialmente, e quando o cara mudar o combo vc seta uma url para ele, ele automaticamente faz o serviço sem dar refresh na pagina!!!
[]'s

Alan

maxguzenski

cara, pq voce nao traz tudo de uma ves e quarda num array em javascript ?
dai voce monta o combo por js…
sem precisar ficar enviando a pagina toda a hora

D

O problema e que sao muitas coisas…dai fica dificil ter tudo isso no meu codigo né???
acho que seria vir do banco…

putz ,isso ta ficando uma confusao…hehehe

será que ninguem teria um exemplo para me ajudar ???

Eu agradeceria muito… =)
Faleu!

maxguzenski

muitos registros sao quantos +/- ??

bom, mas da forma como os outros estao explicando é bem mais simples de fazer… o problema é que fica o reload chato toda hora que seleciona o combo

L

Cara,
eu fiz uma parada parecida com a que vc quer, vou te dar uma resumida:
tenho uma colecao q monto dentro do meu select, e qd ocorre um evento nesse select tenho que mostrar o saldo do cara ok?
como fiz isso? eu mandei todos os dados q eu necessito para a minha pagina e populei esses dados dentro do JavaScript!!! como popular o outro select veja em JavaScript :
http://developer.netscape.com/docs/manuals/index.html?content=javascript.html

abaixo o codigo:

<blockquote>

<script language =“javascript”>

<!–

var valores = new Array();

<c:forEach items="${colecao.lista}" var=“c”>

valores[<c:out value="${c.id}"/>] = “<c:out value=’${c.saldo}’/>”;

</c:forEach>
function exibirSaldoItem(obj){

valor = valores[obj.value];

document.forms[0].saldo.value = valor;

}

//–>

</script>
<select name=“itensSolicitacao” onchange=“exibirSaldoItem(this)”>

<option value=""></option>

<c:forEach items="${colecao.lista}" var=“c”>

<option value="<c:out value=’${c.id}’/>" selected>

<c:out value="${exibe.algumacoisa}"/></option>

</c:forEach>

</select>

<input type=“text” name=“saldo” value="" ></blockquote>
D

É cara…fica fazendo reload toda vez que eu altero o combo…pois é…

“Leo.dep”…cara vou dar uma olhada no seu código…e que eu nao entendo de JSTL…mas valeu …pela ajuda…

Só para deixar claro…com javascript eu ja consegui…mas eu queria fazer deuma forma que eu trouxesse do banco.,…=( :cry:

Valeu!

maxguzenski
&lt;script&gt;
var array = new Array&#40;&#41;;

&lt;% 
for &#40;int i=0; conecao.next&#40;&#41;; i++ &#41; &#123; 
    out.println&#40; "array&#91;"+i+"&#93; = ' "+resultSet.getString&#40;posicao&#41;+" '; "&#41;;
&#125;
%&gt;

&lt;/script&gt;

assim voce monta o javascript dinamicamente…

Criado 30 de maio de 2003
Ultima resposta 5 de jun. de 2003
Respostas 13
Participantes 5