无法使用带有request.getParameterValues()函数的servlet在jsp中使用单选按钮获取列的数据

时间:2018-03-29 09:32:13

标签: html jsp servlets

我有一个包含3列的表。最后一列每行有4个单选按钮。我无法获取提交表单后检查的单选按钮的所有值。我总是只得到一个值,即值在第一行检查单选按钮。

以下是jsp页面的代码:

<form action = "SaveData" method = "POST" target = "_blank">

<h1>LIST</h1>
<%
try {
/* Create string of connection url within specified format with machine
name, port number and database name. Here machine name id localhost and 
database name is student. */
String connectionURL = "jdbc:mysql://localhost:3306/sample";
// declare a connection by using Connection interface
Connection connection = null;
/* declare object of Statement interface that is used for executing sql 
statements. */
Statement statement = null;
// declare a resultset that uses as a table for output data from tha table.
ResultSet rs = null;
// Load JBBC driver "com.mysql.jdbc.Driver"
Class.forName("com.mysql.jdbc.Driver").newInstance();
/* Create a connection by using getConnection() method that takes parameters 
of string type connection url, user name and password to connect to database.*/
connection = DriverManager.getConnection(connectionURL, "root", "password");
/* createStatement() is used for create statement object that is used for 
sending sql statements to the specified database. */
statement = connection.createStatement();
// sql query to retrieve values from the secified table.
String QueryString = "SELECT * from data";
rs = statement.executeQuery(QueryString);
%>
<table class="comparison-table">

<tr>
<th>LIST</th>
<th>Y/N</th>
<th>OPTIONS</th>
</tr>

<div>
<tr>
<%
while (rs.next()) {
String slist=rs.getString(1);
%>
<td name="list"><%= slist%></td>
<td>
<select id="choose" name="choose">
<option>Yes</option>
<option>No</option>
</select>
</td>

<td>
<form>
 <input type="radio" name="option" value="a" checked> A
  <input type="radio" name="option" value="b" >B
  <input type="radio" name="option" value="c" > C
<input type="radio"  name="option" value="d"> D
</form>
</td>
</tr>
</div>
 
<% } %>


<%
// close all the connections.
rs.close();
statement.close();
connection.close();
}
 catch (Exception ex) {
%>

<%
out.println("Unable to connect to database."+ex);
}
%>
</table>
<button value="Submit" id="button">Submit</button>
</form>
   

这是Servlet代码:

import javax.servlet.annotation.WebServlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

//Extend HttpServlet class
@WebServlet("/SaveData")
public class SaveData extends HttpServlet {

 // Method to handle GET method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {


   // Set response content type
   response.setContentType("text/html");

   PrintWriter out = response.getWriter();
   String title = "Reading All Form Parameters";
   String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " + 
"transitional//en\">\n";

   out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor = \"#f0f0f0\">\n" +
      "<h1 align = \"center\">" + title + "</h1>\n" +
      "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
      "<tr bgcolor = \"#949494\">\n" +
         "<th>Param Name</th>"+
         "<th>Param Value(s)</th>\n"+
      "</tr>\n"
   );

   Enumeration paramNames = request.getParameterNames();

   while(paramNames.hasMoreElements()) {
      String paramName = (String)paramNames.nextElement();
       out.print("<tr><td>" + paramName + "</td>\n<td>");
      String[] paramValues = request.getParameterValues(paramName);

      // Read single valued data
      if (paramValues.length == 1) {
         String paramValue = paramValues[0];
         if (paramValue.length() == 0)
            out.println("<i>No Value</i>");
            else
            out.println(paramValue);
      } else {
         // Read multiple valued data
         out.println("<ul>");

         for(int i = 0; i < paramValues.length; i++) {
            out.println("<li>" + paramValues[i]);
         }
         out.println("</ul>");
      }
   } 
    out.println("</tr>\n</table>\n</body></html>");

}

}

提交表单后的输出将是两个参数“choose”和“option”的值。我得到“选择”参数的正确输出即。 cloumn中所有选中的Yes / No选项,而对于“option”参数,我只得到第一行选择单选按钮的值,即如果我在第一行选择'c'单选按钮,只显示'c'其余的行被忽略了。

请帮助我获取String数组中所选单选按钮的所有列的数据。

我还想使用servlet从数据库中获取“slist”的值。这是在td标签下,名称=“list”。

1 个答案:

答案 0 :(得分:0)

首先,您不能嵌套form代码,在单选按钮之前移除form代码。

来自this

  

无线电类型的元素通常用于无线电   groups-描述一组相关的单选按钮的集合   选项。只能选择给定组中的一个单选按钮   同一时间。

您应该添加一个变量来区分这样的行,例如:

<tr>
  <%! int lineNumber = 0 %> 
  <%
    while (rs.next()) {
    String slist=rs.getString(1);
  %>
  <td name="list"><%= slist%></td>
  <td>
    <select id="choose" name="choose">
      <option>Yes</option>
      <option>No</option>
    </select>
  </td>

  <td>
    <input type="radio" name="option<%= lineNumber %>" value="a" checked> A
    <input type="radio" name="option<%= lineNumber %>" value="b" >B
    <input type="radio" name="option<%= lineNumber %>" value="c" > C
    <input type="radio" name="option<%= lineNumber %>" value="d"> D
  </td>
</tr>
<% lineNumber++ %>