powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор параметров формы
16 сообщений из 16, страница 1 из 1
Перебор параметров формы
    #34260365
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за глупый вопрос.

Написал стандартный пример перебора параметров формы.

HTML-код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>array parameters</title>
</head>
<body>
<form action="/jhtp1(saz)/perebortest1" method="post">
Ваше имя?<input name="text" type="text">
<br>
Ваше имя2? <input name="text" type="text">
<h3>Ваш любимый цвет?</h3>
<input  name="radio" type="radio" value="white">White
<br>
<input  name="radio" type="radio" value="blue">Blue
<br>
<input  name="radio" type="radio" value="red">Red
<p> 
<input type="submit" name="submit" value="submit">
<input type="reset" value="reset">
</p>
</form>
</body>
</html>

Cервлет-обработчик:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;
 public   class  perebortest1  extends  HttpServlet
{
 public   void  service(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
response.setContentType("text/html");
Enumeration paramNames=request.getParameterNames();
String color="";
String fn="";

 while  (paramNames.hasMoreElements())
{
String nm=(String)paramNames.nextElement();
String vl=request.getParameterValues(nm)[ 0 ];
 if  (nm.equalsIgnoreCase("radio")) color=vl;
 if  (nm.equalsIgnoreCase("text")) fn=vl;
}	

PrintWriter out= response.getWriter();
out.println("<html><body>");
out.println("<p> First Name:"+fn+"</p>");
out.println("<p> color:"+color+"</p>");
out.println("</html>/<body>");
out.close();
}
}

Только понять не могу, почему цикл
Код: plaintext
 while  (paramNames.hasMoreElements()) 
не "хавает" второй input:
Код: plaintext
(Ваше имя2? <input name="text" type="text">)


Ведь в цикле идет перебор по всем элементам и в итоге при выполнении условия
Код: plaintext
 if  (nm.equalsIgnoreCase("text")) fn=vl
переменной
Код: plaintext
fn
должно присвоиться значение из второго <input name="text">
Может я чего-то не понимаю...
подскажите пожалуйста, почему при переборе в цикле while (paramNames.hasMoreElements()) идет присвоение только из первого <input name="text">, а остальные игнорируются?
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260374
kdanylo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Da potomo chto imena u tvoih poley vvoda odinakovie. Tak doljno rabotat':

<input type="text" name = "text1">
<input type="text" name = "text2">
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260382
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdanyloDa potomo chto imena u tvoih poley vvoda odinakovie. Tak doljno rabotat':

<input type="text" name = "text1">
<input type="text" name = "text2">
Это я понял. Но ведь в цикле перебор идет по всем полям, в итоге должно "ловиться" последнее полe
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260384
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть второе поле <input name="text">
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260400
kdanylo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ty ne dumaj, ty poprobuj a potom podumajesh (Ne obijajsia)
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260418
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdanyloTy ne dumaj, ty poprobuj a potom podumajesh (Ne obijajsia)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 while  (paramNames.hasMoreElements())           //если на форме есть элементы
{
// переходим к следующему элементу (<input  name="text" type="text">):
String nm=(String)paramNames.nextElement();   

//  забиваем в массив значение value этого  элемента: 
String vl=request.getParameterValues(nm)[ 0 ];    

 if  (nm.equalsIgnoreCase("radio")) color=vl;      

//если нижеследующее условие выполняется, то fn присваиваем значение из массива vl:   
 if  (nm.equalsIgnoreCase("text")) fn=vl;             
}

Я все правильно описал в коментариях?
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260542
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
String vl=request.getParameterValues(nm)[ 0 ];
А почему всегда нулевой, сбстно?
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260633
kdanylo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK. Vinovat ja. 2 polia vvoda s odnim imenem toje rabotajet.

Teper' po delu. Tovarishch topikom vishe paravil'no zadaet vopros-

Код: plaintext
1.
String vl=request.getParameterValues(nm)[ 0 ];

vernet znacheniye pervogo polia vvoda i dlia poluchenija vtorogo znachenija ispol'zuj
Код: plaintext
1.
String vl=request.getParameterValues(nm)[ 1 ];

A tak pokazesh vse znacheniya:

Код: plaintext
1.
2.
3.
4.
5.
6.
String[] parameterValues = request.getParameterValues(nm);
out.println("<p><ul><strong>" + nm + "</strong>");
 for  ( int  i= 0 ; i<parameterValues.length; i++){
    out.println("<li>\"" + parameterValues[i] + "\"</li>");
    }    
 out.println("</ul></p>");
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260679
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте лучше request.getParameterMap()
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34260811
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_d
Код: plaintext
1.
String vl=request.getParameterValues(nm)[ 0 ];
А почему всегда нулевой, сбстно?


Так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;
 public   class  perebortest  extends  HttpServlet
{
 public   void  service(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
response.setContentType("text/html");
Enumeration paramNames=request.getParameterNames();
String color="";
String fn="";
 int  f= 0 ;
PrintWriter out= response.getWriter();
out.println("<html><body>");
 while  (paramNames.hasMoreElements())
{
String nm=(String)paramNames.nextElement();
String vl=request.getParameterValues(nm)[f];
 if  (nm.equalsIgnoreCase("radio")) 
{
	color=vl;
	out.println("<p> color:"+color+"</p>");	
}
 if  (nm.equalsIgnoreCase("text")) 
{	
fn=vl;
out.println("<p> First Name:"+fn+"</p>");
}
f=f+ 1 ;
}	
out.println("</html>/<body>");
out.close();
}
}
но только с с <input name="text">. Как только что-то выбираю в radio, выдает ошибку
Код: plaintext
java.lang.ArrayIndexOutOfBoundsException:  1 
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261037
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы походу запутались в циклах, или http://www.sql.ru/forum/actualpost.aspx?bid=38&tid=384456&mid=0&p=1#3652088
или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
String[] values = request.getParameterValues(nm);

 for  (String value : values) {

    ...

}
...
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261073
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_dВы походу запутались в циклах, или http://www.sql.ru/forum/actualpost.aspx?bid=38&tid=384456&mid=0&p=1#3652088
или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
String[] values = request.getParameterValues(nm);

 for  (String value : values) {

    ...

}
...

Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261084
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261194
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_d 324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
Подскажите пожалуйста, а как увеличивать по значению одного параметра
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261230
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
324f4 mozheyko_d 324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
Подскажите пожалуйста, а как увеличивать по значению одного параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
...
 while  (paramNames.hasMoreElements()) {
    
    String nm=(String)paramNames.nextElement();
    
    String[] values = request.getParameterValues(nm);

     for  (String vl : values) {
    
         if  (nm.equalsIgnoreCase("radio")) {

    	    color=vl;
	    out.println("<p> color:"+color+"</p>");	

        }

         if  (nm.equalsIgnoreCase("text")) {	

            fn=vl;
            out.println("<p> First Name:"+fn+"</p>");

        }

    }

}	
...
...
Рейтинг: 0 / 0
Перебор параметров формы
    #34261267
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mozheyko_d 324f4 mozheyko_d 324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
Подскажите пожалуйста, а как увеличивать по значению одного параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
...
 while  (paramNames.hasMoreElements()) {
    
    String nm=(String)paramNames.nextElement();
    
    String[] values = request.getParameterValues(nm);

     for  (String vl : values) {
    
         if  (nm.equalsIgnoreCase("radio")) {

    	    color=vl;
	    out.println("<p> color:"+color+"</p>");	

        }

         if  (nm.equalsIgnoreCase("text")) {	

            fn=vl;
            out.println("<p> First Name:"+fn+"</p>");

        }

    }

}	
...

Cпасибо) попробую)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор параметров формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]