Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор параметров формы / 16 сообщений из 16, страница 1 из 1
17.01.2007, 07:30:24
    #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
17.01.2007, 07:44:52
    #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
17.01.2007, 08:00:44
    #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
17.01.2007, 08:01:47
    #34260384
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
То есть второе поле <input name="text">
...
Рейтинг: 0 / 0
17.01.2007, 08:19:03
    #34260400
kdanylo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
Ty ne dumaj, ty poprobuj a potom podumajesh (Ne obijajsia)
...
Рейтинг: 0 / 0
17.01.2007, 08:34:12
    #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
17.01.2007, 09:39:39
    #34260542
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
Код: plaintext
1.
String vl=request.getParameterValues(nm)[ 0 ];
А почему всегда нулевой, сбстно?
...
Рейтинг: 0 / 0
17.01.2007, 10:03:59
    #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
17.01.2007, 10:16:51
    #34260679
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
Используйте лучше request.getParameterMap()
...
Рейтинг: 0 / 0
17.01.2007, 10:49:36
    #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
17.01.2007, 11:35:53
    #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
17.01.2007, 11:44:52
    #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
17.01.2007, 11:46:47
    #34261084
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
...
Рейтинг: 0 / 0
17.01.2007, 12:07:35
    #34261194
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор параметров формы
mozheyko_d 324f4
...
Спасибо) Но все-таки хотел бы выяснить, где я запутался в цикле? Почему теперь сервлет воспринимает только <input="text"> а на остальных эелментах выдает ошибку?
Вы увеличивали f в цикле по разным параметрам, а не по значениям одного параметра.
Подскажите пожалуйста, а как увеличивать по значению одного параметра
...
Рейтинг: 0 / 0
17.01.2007, 12:16:37
    #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
17.01.2007, 12:25:42
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор параметров формы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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