使用jsp-servlet获取复选框值的问题

时间:2021-07-27 09:39:52

标签: jsp servlets

我正在使用带有 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>

1 个答案:

答案 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 后检查空值。

相关问题