Problema simples [RESOLVIDO]

15 respostas
xxmayconxx

Tenho uma página que tem dois campos com o mesmo name, eles estão assim:

<input type="text" name="nome[0]"> <input type="text" name="nome[1]">

como pego eles na servlet?

request.get???

ja tentei de varias formas e não consegui…

15 Respostas

S

xxmayconxx:
Tenho uma página que tem dois campos com o mesmo name, eles estão assim:

<input type="text" name="nome[0]"> <input type="text" name="nome[1]">

como pego eles na servlet?

request.get???

ja tentei de varias formas e não consegui…

request.getParameter(String nome);
xxmayconxx

eu fiz desse modo e não deu certo, nessa parte deveria ser usado o getParameterValues, que é pra array, mas ele não funciona com esse campos.

S

Ponha os seus campos num forma assim:

<form action="SuaServlet">
<input type="text"  name="nome[0]">  
<input type="text"  name="nome[1]">
<input type="submit" value="Manda para a Servlet">
</form>
E na Servlet você coloca
request.getParameter(String nome);
cido18

troca os nomes para : nome1 e nome2, ve se dá certo ai.

xxmayconxx

Se eu colocar nome1 e nome2 eu sei que funciona, mas tenhoque fazer dessa forma.

se uso request.getParameter("nome");

não funciona, chega null na servlet

S

xxmayconxx:
Se eu colocar nome1 e nome2 eu sei que funciona, mas tenhoque fazer dessa forma.

se uso request.getParameter("nome");

não funciona, chega null na servlet

Eu coloquei o <form action="MinhaServlet"> <input type="text" name="nome[0]"> <input type="text" name="nome[1]"> <input type="submit" value="Manda para a Servlet"> </form>

E na classe Minha Servlet eu coloquei System.out.println(request.getParameter("nome[1]"));

Funcionou perfeitamente.

xxmayconxx

Sim, beleza, se você especificar o indice ali vai, mas se pega só o indice 1, eu quero pegar o array interio com todos os indices de um vez.Desse jeito ai eu teria que pegar um por vez na servlet

S

Você esta querendo pegar as informações e colocar dentro de um Array é isso?

xxmayconxx

Isso, mas usando esse modo que eu falei

S

Tenta isso aqui então:

ArrayList<String> lista = new ArrayList<String>();
		int i = 0;
		while (true) {
			if (request.getParameter("nome[" + i + "]") == null) {
				break;
			}
			lista.add(request.getParameter("nome[" + i + "]"));
			i++;
		}

Não testei mas acho deveria funcionar.

drsmachado

Simples? Quer dizer, nem tanto, não acha?
A primeira coisa seria mudar o método para GET, pois, pelo que entendi, está usando POST. Isso permitiria saber como os parâmetros estão sendo passados.
Eis um pequeno exemplo, e duas formas de se resolver
index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
	<form action="ServletTeste">
		[0] <input type="text" name="nome[0]"/>
		<br/>
		[1] <input type="text" name="nome[1]"/>
		<br/>
		<input type="submit" value="Teste"/>
	</form>
</body>
</html>

ServletTeste.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletTeste
 */
public class ServletTeste extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Map<String, Object> maps = request.getParameterMap();
		Iterator<String> mp = maps.keySet().iterator();
		
		List<String> listaParam = new ArrayList<String>();
		
		while(mp.hasNext()){
			listaParam.add(request.getParameter(mp.next()));
		}
		
		PrintWriter out = response.getWriter();
		out.println("<html>");
		for(String s : listaParam){
			out.println(s);
			out.println("<br/>");
		}
		out.println("</html>");
		
		System.out.println();
	}

}

URL


http://localhost:8080/bla/ServletTeste?nome[0]=este&nome[1]=teste

Saída

Ah, sim, depois de descobrir como os parâmetros são tratados, pode voltar para POST.

J

mas os nomes deles são diferentes em tese, uma vez fiz algo parecido usei dessa forma

<input type="text"  name="nome">  
<input type="text"  name="nome">
xxmayconxx

drsmachado, eu cosegui o mesmo que você, que foi printar os names no console mas não os seus valores

drsmachado

Camarada, uma vez que você obtém os nomes dos parâmetros, você consegue obtê-los.
Eu alterei a servlet, para que ela permita isto.

Mas, qualquer pessoa que utilize o cérebro poderia fazer algo como

List<String> lista = new ArrayList<String>();
for(mp.hasNext()){
lista.add(request.getParameter(mp.next()));
}

E ter, em cada posição da lista, cada um dos parâmetros passados.

Para isto, só é necessário um pouco mais de estudo dentro dos recursos que o java disponibiliza, esforço e dedicação.

xxmayconxx

Entendi, valeu

Sem_Nome, o seu método funcionou, vou colocar o tópico como resolvido.

Criado 11 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 15
Participantes 5