Retrieving multiple textbox values with same name from JSP in Servlet

21,097

Solution 1

You do not name the dynamically created input elements (to "words" or "meaning")

        var element2 = document.createElement("input");
        element2.name = "words";
        element2.type = "text";
        cell2.appendChild(element2);

Solution 2

If you have a form like that:

<form method="post">
    <input type="text" name="words"><br>
    <input type="text" name="words"><br>
    <input type="submit">
</form>

Sends if you put one and two in the textboxs

words=one&words=two

For getting,

String[] words = request.getParameterValues("words");
Share:
21,097
user1371033
Author by

user1371033

Updated on July 05, 2022

Comments

  • user1371033
    user1371033 almost 2 years

    I am trying to pass values of textbox with same name from JSP to servlet but not able to accomplish this task.

    I tried using this in servlet but i only get one textbox value:

    String[] words = request.getParameterValues("words");
    String[] meanings = request.getParameterValues("meaning");
    

    My javascript which helps in generating multiple table rows is:

    <SCRIPT language="javascript">
            function addRow(tableID) {
    
                var table = document.getElementById(tableID);
    
                var rowCount = table.rows.length;
                var row = table.insertRow(rowCount);
    
                var cell1 = row.insertCell(0);
                var element1 = document.createElement("input");
                element1.type = "checkbox";
                cell1.appendChild(element1);
    
                var cell2 = row.insertCell(1);
                var element2 = document.createElement("input");
                element2.type = "text";
    
                cell2.appendChild(element2);
    
                var cell3 = row.insertCell(2);
                var element3 = document.createElement("input");
                element3.type = "text";
                cell3.appendChild(element3);
    
            }
    
            function deleteRow(tableID) {
                try {
                var table = document.getElementById(tableID);
                var rowCount = table.rows.length;
    
                for(var i=0; i<rowCount; i++) {
                    var row = table.rows[i];
                    var chkbox = row.cells[0].childNodes[0];
                    if(null != chkbox && true == chkbox.checked) {
                        table.deleteRow(i);
                        rowCount--;
                        i--;
                    }
    
                }
                }catch(e) {
                    alert(e);
                }
            }
    
        </SCRIPT>
    

    The Html table generating multiple rows:-

    </body>
    <form name="managelist" action="../createlistpath" method="post">
    
        <TABLE id="dataTable" width="600px" border="0">
        <tr>
        <td><b> List Name</b></td>
        <td colspan="2"><input type="text" name="listname"></td>
        </tr>
    
        <tr >
            <td><b>Select</b></td>
            <td><b>Word</b></td>
            <td><b>Meaning</b></td>
        </tr>
            <TR >
                <TD><INPUT type="checkbox" name="checkbox"/></TD>
                <TD> <INPUT type="text" name="words" /> </TD>
                <TD> <INPUT type="text" name="meaning" /> </TD>
            </TR>
        </TABLE>
    
     <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
    
        <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
    <br>
    <input type="submit" value = "submit" name="submit">
    
    </form>
    </body>
    
  • user1371033
    user1371033 almost 12 years
    hey thanks man! I wonder how that slipped from my mind :P thanks once again :)
  • Ram Patra
    Ram Patra over 8 years
    My fields are like this <input type="text" name="words[item1]">, <input type="text" name="words[item2]"> and so on. How do I get this at the servlet end?