2009-05-21 3 views
1

Ich versuche, ein Formular an ein Servlet (Java) zu senden. Das Formular enthält eine Reihe von Fragen, jede Frage hat 4 Optionsfelder und der Benutzer wählt eine davon aus. Ich kenne nicht die Anzahl der Fragen, die in dem Formular enthalten sind. Es könnte 10, 15, 12 sein ... hängt von einigen anderen Kriterien ab. Meine Frage ist, wie Sie am besten die Liste der Auswahlmöglichkeiten abrufen, die der Benutzer für die Fragen im Formular getroffen hat.wie ein Formular zu senden, die dynamisch (unbekannte) Anzahl der Felder haben

Antwort

0

Eine typische Technik besteht darin, die Felder mit einem gemeinsamen Präfix zu benennen und sie dann zu durchlaufen: q000, q001, q002, usw., bis Sie einen nicht vorhandenen Wert erreichen.

1

Ein schneller Trick, der mir in den Sinn kommt ist es, alle Felder als

"question_"+n 

zu benennen und einen Eingabetyp mit dem Wert von n versteckt haben. Wenn das Formular eine Möglichkeit bietet zu wissen, wie viele Fragen zu präsentieren sind, sollte es eine Möglichkeit geben, den Wert von n festzulegen.

Später abrufen Sie nur diesen Wert und ...

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

Dies ist das erste, was

2
mir in den Sinn kommt

Sie verwenden HttpServletRequest.getParameterNames() eine Aufzählung von Namen abzurufen alle Formularelemente innerhalb der Anfrage Sie können dann über die Enumeration iterieren und mit HttpServletRequest.getParameter (name) für jedes Element einen individuellen Wert anfordern.

Wenn Ihr HTML andere FORM-Elemente als Ihre Options-Optionsfelder enthält, verwenden Sie die geschickte Namenskonvention dieser Optionsschaltfläche, sodass Sie beim Aufzählen über die Parameternamen wissen, was Sie anfordern müssen.

Ein Beispiel.

Wenn Ihr Formular enthält zwei Fragen mit folgenden Optionen:

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

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

} 

andere derselben zu tun ist:

In Ihrem Servlet

int maxQuestionNumber = Ganzzahl.parseInt (request.getParameter ("maxQuest ionNumber ")); // Dies sollte eine versteckte Variable in Ihrem HTML-Formular sein, die die maximalen Fragen in Ihrem Formular darstellt.

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

Ich würde keine Workarounds vorschlagen. Die ServletRequest.getParameterMap() würde in diesem Szenario nützlich sein. Die Schlüssel der Map hätten den Typ String und die Werte hätten den Typ String [].

Daher können Sie sehr leicht Schleife durch die Karte foreach-Schleife so etwas wie dieses verwenden,

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

Ich hoffe, dass es helfen würde.

0

Sie könnten einfach JSON verwenden und so eine Zeichenfolge an das Servlet übergeben, das eine sehr lange Zeichenfolge verarbeiten kann, wenn Sie POST verwenden. Auf diese Weise können Sie alles passieren, was Sie wollen, auch wenn die Parameter komplex sind.

Verwandte Themen