2009-05-21 6 views
1

J'essaie de soumettre un formulaire à une servlet (java). Le formulaire a un tas de questions, chaque question a 4 boutons radio et l'utilisateur en sélectionne un. Je ne connais pas le nombre de questions qui seront dans le formulaire. Cela pourrait être 10, 15, 12 ... dépend de quelques autres critères. Ma question est quelle est la meilleure façon de récupérer la liste des choix que l'utilisateur a fait pour les questions sur le formulaire.comment soumettre un formulaire qui aura dynamiquement (inconnu) nombre de champs

Répondre

0

Une technique classique consiste à nommer les champs avec un préfixe commun, puis de les parcourir: q000, q001, q002, etc., jusqu'à ce que vous atteigniez celui qui n'est pas présent.

1

Un truc rapide qui me vient à l'esprit est de nommer tous les champs

"question_"+n 

Et un type d'entrée cachée avec la valeur de n. Si le formulaire a un moyen de savoir combien de questions à présenter, il devrait avoir un moyen de définir la valeur de n.

Plus tard, vous récupérez juste valeur et que ...

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

C'est la première chose qui vient à l'esprit

2

Vous pouvez utiliser HttpServletRequest.getParameterNames() pour récupérer une énumération des noms de tous les éléments de formulaire dans la demande. Vous pouvez ensuite itérer sur l'énumération et demander une valeur individuelle pour chaque élément à l'aide de HttpServletRequest.getParameter (name). Si votre code HTML contient d'autres éléments FORM autres que les boutons radio d'option, utilisez la convention de dénomination astucieuse de ces boutons radio pour que, lors de l'énumération des noms de paramètres, vous sachiez quoi demander.

Un exemple.

Si votre formulaire contient deux questions avec les options suivantes:

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"> 

Dans votre servlet,

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

} 

Une autre de faire la même chose est:

Dans votre servlet,

int maxQuestionNumber = Integer.parseInt (request.getParameter ("maxQuest ionNumber ")); // cela devrait être une variable cachée dans votre formulaire HTML représentant les questions max dans votre formulaire.

for(int i=1;i<=maxQuestionNumber;i++){ 
    String value = request.getParameter("question"+i); 
    //your logic here.. 
} 
1

Je ne suggère aucune solution de contournement. le ServletRequest.getParameterMap() serait utile dans ce scenerio. Les clés de la carte seront de type String, et les valeurs seront de type String [].

Par conséquent, vous pouvez boucle très facilement grâce à la carte en utilisant la boucle foreach quelque chose comme ça,

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 
    } 
} 

J'espère que cela aiderait.

0

Vous pouvez simplement utiliser JSON, et donc passer une chaîne à la servlet, qui peut gérer une très longue chaîne si vous utilisez POST. De cette façon, vous pouvez passer ce que vous voulez, même si les paramètres sont complexes.

Questions connexes