как отправить форму, в которой будет динамически (неизвестно) количество полей - PullRequest
1 голос
/ 21 мая 2009

Я пытаюсь отправить форму сервлету (Java). Форма имеет кучу вопросов, каждый вопрос имеет 4 переключателя, и пользователь выбирает один из них. Я не знаю количество вопросов, которые будут в форме. Это может быть 10, 15, 12 ... зависит от некоторых других критериев. Мой вопрос заключается в том, как лучше всего получить список вариантов, которые пользователь сделал для вопросов в форме.

Ответы [ 5 ]

2 голосов
/ 21 мая 2009

Вы можете использовать HttpServletRequest.getParameterNames () для получения Перечисления имен всех элементов формы в запросе. Затем вы можете перебирать перечисление и запрашивать индивидуальное значение для каждого элемента, используя HttpServletRequest.getParameter (name).

Если ваш HTML-код содержит другие элементы FORM, кроме переключателей опций, используйте разумное соглашение об именах этих переключателей, чтобы при перечислении имен параметров вы знали, что запрашивать.

Пример.

Если ваша форма содержит два вопроса со следующими параметрами:

Question 1: 
<input type="radio" name="question1" value="option1">
<input type="radio" name="question1" value="option2">
<input type="radio" name="question1" value="option3"> 

Question 2:
<input type="radio" name="question2" value="option1">
<input type="radio" name="question2" value="option2">
<input type="radio" name="question2" value="option3"> 

В вашем сервлете,

Enumeration e = request.getParameterValues();
while(e.hasMoreElements()){
     String name = (String)e.nextElement();
     if(name.startsWith("question"){
        String value = request.getParameter(name);
        //your logic here
     }

}

Другой способ сделать то же самое:

В вашем сервлете,

int maxQuestionNumber = Integer.parseInt (request.getParameter ("maxQuestionNumber")); // это должна быть скрытая переменная в вашей форме HTML, представляющая максимальное количество вопросов в вашей форме.

for(int i=1;i<=maxQuestionNumber;i++){
     String value = request.getParameter("question"+i);
     //your logic here..
}
1 голос
/ 21 мая 2009

Я бы не предложил обходных путей. ServletRequest.getParameterMap () пригодится в этом сценарии. Ключи карты будут иметь тип String, а значения будут иметь тип String [].

Следовательно, вы можете очень легко проходить по карте, используя цикл foreach примерно так:

for(Map.Entry<K, V> entry : map.entrySet()){
    ..
    if(entry.getValue().length > 1){
       //means the choices not the question
    }else{
       //means the question not the choices
    }
}

Надеюсь, это поможет.

1 голос
/ 21 мая 2009

Быстрый трюк, который приходит мне в голову - это назвать все поля как

"question_"+n

И тип ввода скрыт со значением n. Если в форме есть способ узнать, сколько вопросов задавать, у нее должен быть способ установить значение n.

Позже вы просто получаете это значение и ...

 n = new Integer( request.getParameter("number_of_question"));
 for( int i = 0 ; i < n ; i++ ) { 
      list.add( request.getParameter("question_"+i));
  }

Это первое, что приходит мне в голову

0 голосов
/ 21 мая 2009

Вы можете просто использовать JSON и передать строку сервлету, который может обрабатывать очень длинную строку, если вы используете POST. Таким образом, вы можете передать все, что захотите, даже если параметры сложные.

0 голосов
/ 21 мая 2009

Типичным методом является присвоение имен полям с общим префиксом, а затем итерация по ним: q000, q001, q002 и т. Д., Пока не будет достигнуто поле, которого нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...