使用 select 和选项标签在 jsp 中插入数据

Inserting a data in jsp by using select and option tag

在我的应用程序中,我正在从 table class 读取数据,并且我在 table 测试中插入了 id 值。我通常使用 table 并在 jsp 中插入 link 但这次我需要通过选项标签和插入按钮显示我的数据。当我单击插入按钮时出现此错误(抛出异常 [java.lang.NumberFormatException: For input string: ""] with root cause java.lang.NumberFormatException:对于输入字符串:"" )

当我使用 table 和 link 进行插入时没有问题,因此 servlet 和数据库 class 工作正常。我认为问题可能出在我如何使用选项标签

jsp 文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<c:forEach var="tempstudent" items="${select}">
<c:url var="insert" value="add_course">
  <c:param name="command" value="insert"/>
    <c:param name="courseid" value="${tempstudent.id}"/>
   </c:url> 
<tr>
<td>${tempstudent.id}</td>
<td>${tempstudent.name}</td>

<td> 
  <a href="${insert}" 
       onclick="if (!(confirm('Are you sure you want to insert this student?'))) return false"> 
      
      insert</a>  
       </td> 
</tr>

</c:forEach>




</table>
<form action="add_course" method="GET">
   <input type="hidden" name="command" value="insert" />
<input type="hidden" name="courseid" value="${tempstudent.id}"/>

<select>

<c:forEach var="tempstudent" items="${select}">
<option  value="courseid">${tempstudent.id},<td>${tempstudent.name}</td>
</option>

</c:forEach>

  


</select>
<td><label></label></td>
      <td><input type="submit" value="Save" class="save"/></td>
</form>


</body>
</html>

servlet 文件

  

package com.web;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class add_course
 */
@WebServlet("/add_course")
public class add_course extends HttpServlet {
 private dbutil dbutil;
 @Resource(name="jdbc/web_student_tracker")
 private DataSource dataSource;
 @Override
 public void init() throws ServletException {
  //dbutil= new dbutil(dataSource);
  super.init();
  try {
   dbutil=new dbutil(dataSource);
  }
  catch(Exception exc) {
  throw new ServletException(exc);
  }
 }
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//  List<student> student;
//  try {
//   student = dbutil.getcourse();
//   request.setAttribute("select",student);
//   RequestDispatcher dispatcher = request.getRequestDispatcher("/course.jsp");
//  dispatcher.forward(request,response);
//  } catch (Exception e) {   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
  try {
   String thecommand=request.getParameter("command");
   if(thecommand==null) {
    thecommand="LIST";
   }
   switch(thecommand) {
   case"LIST":
    listcourse(request,response);
    break;
   case"insert":
    insertcourse(request,response);
    break;
   }
  }
  catch(Exception exc) {
   throw new ServletException(exc);
  }
  
 
 }
 private void insertcourse(HttpServletRequest request, HttpServletResponse response) throws Exception {

  int courseid = Integer.parseInt(request.getParameter("courseid"));
    student thestudent=new student(courseid);
    dbutil.insetcourse(thestudent);
    request.setAttribute("message", "Records loaded successfully");
    RequestDispatcher dispatcher = request.getRequestDispatcher("/course.jsp");
    dispatcher.forward(request,response);
//    int courseid = Integer.parseInt(request.getParameter("courseid"));
//   student thestudent=new student(courseid);
//   dbutil.insetcourse(thestudent);
//   insertcourse(request,response);
   

 }
 private void listcourse(HttpServletRequest request, HttpServletResponse response) throws Exception {
  List<course> student=dbutil.getcourse();
 request.setAttribute("select",student);
 RequestDispatcher dispatcher = request.getRequestDispatcher("/course.jsp");
 dispatcher.forward(request,response);
 }

}

// 数据库 class

public List <course> getcourse() throws Exception{
 List<course> course=new ArrayList<>();
 Connection myConn = null;
 Statement myStmt = null;
 ResultSet myRs = null;
 try {
  
  myConn=dataSource.getConnection();
  //String sql="select id from class";
  String sql ="select id,name from class";
  myStmt=myConn.createStatement();
  myRs=myStmt.executeQuery(sql);
  while (myRs.next()) {
 int myid = myRs.getInt("id");
 String myname =myRs.getString("name");
 course tempstudent = new course(myid,myname);

    course.add(tempstudent);
 }
 return course;
}
 finally {
  // close JDBC objects
  close(myConn, myStmt, myRs);
 }  
}

public void insetcourse(student thestudent)throws SQLException  {
 Connection myConn = null;
 PreparedStatement myStmt=null;
 /////////
 try {
  myConn = dataSource.getConnection();
  String sql="insert into test"+"(id)"+"value(?)";
  myStmt=myConn.prepareStatement(sql);

  myStmt.setInt(1,thestudent.getId());
  
  myStmt.execute();
  
 }
 finally {
  close(myConn,myStmt,null);
 }
}

您的 <select> 标签正在传递一个字符串值,即:<option value="courseid">..</option> 这就是您获得 java.lang.NumberFormatException: For input string: "" 的原因,因为这里 value="cousreid" 将传递给它的是字符串。相反<select> 的代码应如下所示:

<!--giving name attribute to access it in servlet-->
<select name="select">
  <c:forEach var="tempstudent" items="${select}">
  <!--passing id--> 
    <option value="${tempstudent.id}">${tempstudent.id},
      <td>${tempstudent.name}</td>
    </option>
  </c:forEach>
</select>

在您的 servlet 中使用以下代码访问 <select> 值:

int courseid = Integer.parseInt(request.getParameter("select"));