[RESOLVIDO] Como enviar como parâmetro valor recuperado em uma c:foreach para uma servlet?

18 respostas
B

Boa tarde a todos!!!
Amigos é o seguinte.
na minha aplicação eu tenho uma jsp que exibe uma lista de registros recuperados do BD dentro de uma tabela HTML e na última coluna da tabela tenho um botão para cada registro, e eu gostaria que quando fosse clicado enviasse para um servlet o parâmetro referente ao id daquele registro para que eu possa exibir os dados completos daquele registro em uma nova página JSP para que o usuário pudesse realizar alterações naquele registro, como alterar o status etc.
tentei <c:set, c:param mas como sou iniciante não obtive sucesso
Como eu faço isto?
Aí está a imagem da tela de consulta: (Pode ser inserido uma imagem que está na minha máquina?)
Testando…

E aí vai o código da JSP

...
<td width="5%" align="center" bgcolor=""><font size="2" style="verdana" color="blue">
				<c:out value="${inc.status}"/>
			</font></td>
			<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >	
				<form name="form" action="mvc" method="get">
					<c:set var="id_incidente" value="${inc.id}"/><br>						
					<input type="hidden" name="business" value"BuscaIncidenteParaAlterar">
					<input type="hidden" name="id">
					<input type="submit" value="Aterar" align="center">
				</form>
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

Obrigado

18 Respostas

P

Você pode fazer uma função javascript ou um link normal mesmo, ai retiraria o botão.

B

eu tenho uma idéia de como seria este link mas como eu iria inserir como parâmetro que vai ser passado o valor do id daquele registro?
Ex:

<c:foreach var="">
...
<tr>
  <td>
     <a href="meuservlet?parametro1=">?????????????>alterar</a>
   </td>
</tr>
</table>
</c:foreach>

Não sei nada de javascript.

J

Assim;

1. <c:foreach var=""> 2. ... 3. <tr> 4. <td> 5. <a href="meuservlet?parametro1=${inc.id}">alterar</a> 6. </td> 7. </tr> 8. </table> 9. </c:foreach>

B

Obrigado Jamikas mas me desculpe pois eu esqueci de um detalhe.
Eu estou usando uma classe que faz autenticação de classes java como se elas fossem servlet mas elas não são servlet na verdade. É um modelo mvc que eu aprendi a fazer lendo uma apostila da caelum. Com isso eu não preciso mapear o servlet dentro do web.xml sempre que eu quiser utilizar um servlet. “Deu pra entender?”
Do jeito que você me falou funcionaria perfeitamente seu estivesse mapeando o servlet no web.xml mas não estou utilizando assim.
Vou postar parte do meu código e acho que vocês vão entender por que eu estou utilizando um botão dentro de um form que é para passar vários parâmetros através de “inputs do tipo hidden” para essa minha classe controladora.

<td width="5%" align="center" bgcolor=""><font size="2" style="verdana" color="blue">
				<c:out value="${inc.status}"/>
			</font></td>
			<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >	
				<form name="form" action="mvc" method="get">					
					<input type="hidden" name="business" value="BuscaIncidenteParaAlterar">
					<input type="hidden" name="id" value=""
					<input type="submit" value="Aterar" align="center">
				</form>
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

Se tiver uma sugestão mais viável eu agradeço muito.

J

Bruno, da maneira que esta o seu codigo vc esta multiplicando n vezes o mesmo form, isso significa que vc tera problemas na hora de submeter. Acredito que vc terá um pouco mais de trabalho do que o esperado, pois vc recebe muitos atributos duplicados. Vc terá que utilizar uma função javascript para unificar/equalizar para somente um form e um id de envio.

B

Resumindo…
me lasquei :frowning:

tel algum exemplo de como seria esta função?
Não tem como otimizar este código para utilizar somente JSTL?

Se eu tiver que partir para javascript acho que vou abrir uma excessão para esta servlet e vou implementá-la do jeito convencional mas acho que isso não seria uma boa prática por que vai fugir do escopo da lógica da minha aplicação.

Puts, passar os parâmetros direto do JSP para a servlet e montar a página de resultado dentro da servlet vai ser sinistro…

Coisa de iniciante né…

B

Pessoal, hoje estou tentando fazer com link, não dá erro mas também não passa o valor do parâmetro.
Estou fazendo assim.

<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >
				<c:set var="id" value="${inc.id}"/>				
				<a href='mvc?business=BuscaIncidenteParaAlterar&id='${inc.id}>Alterar</a>
				
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

e a URL fica assim

R

Bruno Lacerda:
Pessoal, hoje estou tentando fazer com link, não dá erro mas também não passa o valor do parâmetro.
Estou fazendo assim.

<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >
				<c:set var="id" value="${inc.id}"/>				
				<a href='mvc?business=BuscaIncidenteParaAlterar&id=<c:out value="${inc.id}"/> '>Alterar</a>
				
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

e a URL fica assim


http://localhost:8082/skafeweb/mvc?business=BuscaIncidenteParaAlterar&id=

Veja a diferença do meu codigo para o seu, acredito que um <c:out value="${inc.id}"/> deva imprimir a conteudo da variavel.

B

Imprimir imprime mas o conteúdo da célula fica o id+Alterar
Ex: 32Alterar
Quando na verdade o id do incidente já está sendo exibino na primeira coluna e este “Alterar” é a última coluna da minha tabela.
Uu estou querendo passar o valor do id para a ServletControler “(mvc)” junto com o parâmetro business e com o parâmetro id.
Aí é que está o lance.
Não estou conseguindo passar o valor do id eplo link.
Já me falaram para usar javascript mas acredito que deva haver alguma forma de passar o valor do parâmetro com EL.
Alguma outra sugestão???
Obrigado.

B

Pessoal, deve ter algum jeito de se passar para um servlet através de um link, dentro de um parâmetro o valor recuperado com EL ou com taglib.
Se eu crio uma tabela com jsp e utilizo os resultados retornados pela <c:out> para preencher as células da tabela, deve ter algum jeito de passar através de um link os parâmetros retornados de uma determidada linha ou célula utilizando somente EL.
Quem já utilizou alguma solução deste tipo resolveu este problema de que forma.
Quero dizer que estou buscando solução em outras fontes na net e assim que encontrar eu posto aqui também. Nem que seja uma resposta definitiva do tipo:
Passar parâmetros para um servlet utilizando EL ou taglib é impossível.
Mais uma vez agradeço a todos.

B

A forma de funcionamento que eu preciso é semelhante a forma de funcionamento do guj. Você clica em um link e ele exibe todas as informações referentes aquele tópico.
Parece simples.

B

ME AJUDA AÍ GALERA.
Per favore… :frowning:

X

Resolvi isso uma vez usando html:link forward
Minha action tinha um atributo acao, entao eu teria que chamar

usuarioAction.do?acao=detalhesusuario&userId=XXXXX

mas achamar usando a:href nao rodava. Entao vi uma dica na mailing list do apache criei um global forward

<global-forward action="usuarioAction.do?acao=detalhesusuario" name="detalhesUsuarioAction"/>

e no jsp:

<html:link forward="detalhesUsuarioAction" paramName="usuario" paramProperty="userId" paramId="userId"> <c:out value="${usuario.userId}"/> </html:link> <c:out value="${usuario.nome}"/> <c:out value="${usuario.numeroDeDedosNoPeEsquerdo}"/>

Acho que pra resolver mais elegantemente usando o ActionDispatcher
.

B

Beleza!
mas qual taglib está associada a esta diretiva html?<html:link>?
A tag é configurada dentro do web-xml?
Como o html:link trabalha junto com o ?

B

hgfhfghfghf:roll:

Bruno Lacerda:
Boa tarde a todos!!!
Amigos é o seguinte.
na minha aplicação eu tenho uma jsp que exibe uma lista de registros recuperados do BD dentro de uma tabela HTML e na última coluna da tabela tenho um botão para cada registro, e eu gostaria que quando fosse clicado enviasse para um servlet o parâmetro referente ao id daquele registro para que eu possa exibir os dados completos daquele registro em uma nova página JSP para que o usuário pudesse realizar alterações naquele registro, como alterar o status etc.
tentei <c:set, c:param mas como sou iniciante não obtive sucesso
Como eu faço isto?
Aí está a imagem da tela de consulta: (Pode ser inserido uma imagem que está na minha máquina?)
Testando…

E aí vai o código da JSP

...
<td width="5%" align="center" bgcolor=""><font size="2" style="verdana" color="blue">
				<c:out value="${inc.status}"/>
			</font></td>
			<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >	
				<form name="form" action="mvc" method="get">
					<c:set var="id_incidente" value="${inc.id}"/><br>						
					<input type="hidden" name="business" value"BuscaIncidenteParaAlterar">
					<input type="hidden" name="id">
					<input type="submit" value="Aterar" align="center">
				</form>
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

Obrigado

X

parece que eu inventei aquele xml do struts =P. É na verdade:

como se configura um global forward no strut-config.xml

Como assim que tag está assosiada a html? Mesmo padrão da documentação do struts 1.3.8…
http://struts.apache.org/1.3.8/

B

babi_underground:
hgfhfghfghf:roll:
Bruno Lacerda:
Boa tarde a todos!!!
Amigos é o seguinte.
na minha aplicação eu tenho uma jsp que exibe uma lista de registros recuperados do BD dentro de uma tabela HTML e na última coluna da tabela tenho um botão para cada registro, e eu gostaria que quando fosse clicado enviasse para um servlet o parâmetro referente ao id daquele registro para que eu possa exibir os dados completos daquele registro em uma nova página JSP para que o usuário pudesse realizar alterações naquele registro, como alterar o status etc.
tentei <c:set, c:param mas como sou iniciante não obtive sucesso
Como eu faço isto?
Aí está a imagem da tela de consulta: (Pode ser inserido uma imagem que está na minha máquina?)
Testando…

E aí vai o código da JSP

...
<td width="5%" align="center" bgcolor=""><font size="2" style="verdana" color="blue">
				<c:out value="${inc.status}"/>
			</font></td>
			<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >	
				<form name="form" action="mvc" method="get">
					<c:set var="id_incidente" value="${inc.id}"/><br>						
					<input type="hidden" name="business" value"BuscaIncidenteParaAlterar">
					<input type="hidden" name="id">
					<input type="submit" value="Aterar" align="center">
				</form>
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

Obrigado

Algo errado???

B

Galera resolvi de uma forma simples.
Utilizei
Criei uma variável “id” com c:set e armazenei nela o valor do id do incidente.
Depois foi só colocar o EL ${id} como parte do linke e funcionou belezinha.

O código:

<td valign="baseline" align="center" width="7%" bgcolor="" ><font size="2" style="verdana" color="blue" >
				<c:set var="id" value="${inc.id}"/>					
				<a href='mvc?business=BuscaIncidenteParaAlterar&id=${id}'>Alterar</a>				
			</font></td>	
		</tr>
	</table>		
	</c:forEach>

Obrigado aqueles que me ajudaram neste tópico.

[]'s

Criado 11 de setembro de 2007
Ultima resposta 17 de set. de 2007
Respostas 18
Participantes 6