我正在使用带有 servlet 的 jsp。我通过从 mysql 数据库表“类别”中获取值来将值显示到复选框中。但是在获取值后,我想选择一些值并将它们发送到其他数据库表中。但每次,我都会收到错误消息“无法读取数组长度,因为“产品”为空”。我没有使用 'request.getParameterValues("productName")' 获得任何值。因此无法将所选值发送到其他表。
This is my sample code:
**add_product_to_category.jsp**
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.SQLException"%>
<%
String id = request.getParameter("id");
String driver = "com.mysql.jdbc.Driver";
String connectionUrl = "jdbc:mysql://localhost:3306/";
String database = "stationaryapp";
String userid = "root";
String password = "...";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
%>
<body>
<form action="ValidateProducts" method="post" id="addProductTocategoryForm">
<table id="t01" class="table table-striped table-bordered"
style="width: 100%">
<thead>
<tr>
<th>Product ID</th>
<th>Product Name</th>
</tr>
</thead>
<tbody>
<%
try {
connection = DriverManager.getConnection(connectionUrl + database, userid, password);
statement = connection.createStatement();
String sql = "select * from products";
resultSet = statement.executeQuery(sql);
int i = 0;
while (resultSet.next()) {
String taskId = resultSet.getString("id");
%>
<tr>
<td><%=resultSet.getString("id")%></td>
<td><input type="checkbox" name="productName"
value="<%=resultSet.getString("product_name")%>"><%=resultSet.getString("product_name")%>
</td>
</tr>
<%
i++;
}
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</tbody>
</table>
</div>
<br>
</fieldset>
<br>
<button type="submit" class="addProductCategory" name="Submit"
value="Add Product To Category">Submit</button>
<br>
</form>
</body>
**Validate.jsp**
public class Validate extends HttpServlet {
private static final long serialVersionUID = 1L;
public Validate() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter printWriter = response.getWriter();
String products[] = request.getParameterValues("productName");
try {
String product = "";
for (int i = 0; i < products.length; i++) {
product = product + "" + products[i] + ",";
}
printWriter.println("Products Selected Are : " + product);
} catch (Exception e) {
printWriter.println("The Error Is : " + e.getMessage());
}
}
}
**web.xml**
<servlet>
<servlet-name>checkboxProducts</servlet-name>
<servlet-class>login.Validate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>checkboxProducts</servlet-name>
<url-pattern>/ValidateProducts</url-pattern>
</servlet-mapping>
答案 0 :(得分:0)
如果对 request.getParameterValues("productName")
的调用返回 null,则意味着在提交表单时没有选中单个复选框。根据{{3}}:
Returns an array of String objects containing all of the values the given request parameter has, or null if the parameter does not exist.
因此您必须在调用 getParameterValues
后检查空值。