Issue
in my application i am reading a data from table class and i insert the id value in table test. i usually use table and insert link in jsp but this time i need to show my data by option tag and button for inserting. when i click on insert button i have this error ( threw exception [java.lang.NumberFormatException: For input string: ""] with root cause java.lang.NumberFormatException: For input string: "" )
i have no problem when i use table and link for insert so the servlet and database class working fine. i think problem can be how i am using option tag
jsp file
<%@ 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 file
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);
}
}
// database 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);
}
}
Solution
Your <select>
tag is passing a string value i.e : <option value="courseid">..</option>
thats why you are getting java.lang.NumberFormatException: For input string: ""
because here value="cousreid"
which will get pass it is string .Instead your code should look like below for <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>
In your servlet access <select>
value using below code :
int courseid = Integer.parseInt(request.getParameter("select"));
Answered By - Swati