I have this JSP form where i have some values inserted from the previous page.
<script language="javascript" type="text/javascript">
var i = 1;
function addRow() {
var tbl = document.getElementById('table1');
var lastRow = tbl.rows.length;
var iteration = lastRow - 1;
var row = tbl.insertRow(lastRow);
var firstCell = row.insertCell(0);
var el = document.createElement('input');
el.type = 'text';
el.name = 'name_' + i;
el.id = 'name_' + i;
el.size = 10;
el.maxlength = 10;
firstCell.appendChild(el);
// alert(i);
i++;
frm.h.value = i;
// alert(i);
}
</script>
<form action="CreateAssignments" method="post"
enctype="multipart/form-data">
<center>
<table id="table1">
<tr>
<td>
<p>Degree :</p>
</td>
<td><label><%=request.getParameter("degree")%> </label> <input type="hidden" name="degree"
value="<%=request.getParameter("degree")%>" /></td>
<td></td>
<td>
<p>Course :</p>
</td>
<td><label><%=request.getParameter("course")%> </label><input
type="hidden" name="course"
value="<%=request.getParameter("course")%>" /></td>
</tr>
<tr>
<td>
<p>Stream :</p>
</td>
<td><label><%=request.getParameter("stream")%> </label><input
type="hidden" name="stream"
value="<%=request.getParameter("stream")%>" /></td>
<td></td>
<td>
<p>Section :</p>
</td>
<td><label><%=request.getParameter("section")%> </label><input
type="hidden" name="section"
value="<%=request.getParameter("section")%>" /></td>
</tr>
<tr>
<td>
<p>Semester :</p>
</td>
<td><label><%=request.getParameter("semester")%></label><input
type="hidden" name="semester"
value="<%=request.getParameter("semester")%>" /></td>
<td></td>
<td>
<p>Paper Code :</p>
</td>
<td><label><%=request.getParameter("papercode")%></label><input
type="hidden" name="papercode"
value="<%=request.getParameter("papercode")%>" /></td>
</tr>
<tr>
<td><p>
<input type="button" value="Add Questions" onclick="addRow();" />
</p></td>
</tr>
<tr>
<td><p>Start Date:</p></td>
<td><p>
<input type="date" name="startdate" />
</p></td>
</tr>
<tr>
<td><p>End Date:</p></td>
<td><p>
<input type="date" name="enddate" />
</p></td>
</tr>
<tr>
<td><p>Assignment Name:</p></td>
<td><p>
<input type="text" name="assname" />
</p></td>
</tr>
<tr>
<td><p>Upload File</p></td>
<td><p>
<input type="file" name="fileupload" value="" />
</p></td>
</tr>
<tr>
<td><p></p></td>
<td></td>
<tr>
</table>
<p>
<input type="submit" value="Create" />
</p>
</center>
</form>
And this Java class to insert data into the database.
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
session = request.getSession(true);
String assignmentName = request.getParameter("assname");
String startDate = request.getParameter("startdate");
String endDate = request.getParameter("enddate");
String course = request.getParameter("course");
String degree = request.getParameter("degree");
System.out.println("degree: "+degree);
String semester = request.getParameter("semester");
String paperCode = request.getParameter("papercode");
String stream = request.getParameter("stream");
String fileName = uploadFile(request, response);
String question1=request.getParameter("name_1");
String question2=request.getParameter("name_2");
String question3=request.getParameter("name_3");
String question4=request.getParameter("name_4");
String question5=request.getParameter("name_5");
String question6=request.getParameter("name_6");
System.out.println("FILE NAME : " + fileName);
try {
PreparedStatement ps = connection.prepareStatement("insert into assignment_master values (?,?,?,?,?,?,?,?,?,?)");
ps.setString(1, "2");
ps.setString(2, assignmentName);
ps.setString(3, degree);
ps.setString(4, course);
ps.setString(5, stream);
ps.setString(6, semester);
ps.setString(7, (String) session.getAttribute("employeeId"));
ps.setString(8, fileName);
ps.setString(9, startDate);
ps.setString(10, endDate);
ps.executeUpdate();
PreparedStatement ps1 = connection
.prepareStatement("select max(assignment_id) assignmentId from assignment_master");
ResultSet rs = ps1.executeQuery();
PreparedStatement ps2 = connection.prepareStatement("insert into assignment_subject(?,?)");
ps2.setString(1, rs.getString("assignmentId"));
ps2.setString(2, paperCode);
ps2.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String uploadFile(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html");
// PrintWriter out = response.getWriter();
// out.println("<html>");
// out.println("<body>");
String value = "";
FileItemStream fileItemStream = null;
boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
if (isMultiPart) {
// out.println("Yes Multipart data");
ServletFileUpload upload = new ServletFileUpload();
try {
FileItemIterator itr = upload.getItemIterator(request);
while (itr.hasNext()) {
fileItemStream = itr.next();
if (fileItemStream.isFormField()) {
// do field related work
String fieldName = fileItemStream.getFieldName();
InputStream is = fileItemStream.openStream();
byte[] b = new byte[is.available()];
is.read(b);
value = new String(b);
// out.println(fieldName + " : " + value);
} else {
String path = getServletContext().getRealPath("/");
System.out.println("PATH : " + path);
if (FileUpload.processFile(path, fileItemStream, value)) {
System.out.println("File Uploaded Successfully");
// request.setAttribute("imagePath", path
// + fileItemStream.getName());
// RequestDispatcher gotoShowPage = request
// .getRequestDispatcher("showPage.jsp");
// gotoShowPage.forward(request, response);
} else {
// out.println("File Uploading failed ");
System.out.println("File Uploading failed ");
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
}
} else {
// out.println("No Multipart data");
}
// out.println("</body>");
// out.println("</html>");
return fileItemStream.getName();
}
}
But when i submit this form and try to insert data, I get an error saying primary key cannot be null and when i debug i realise that actually all the fields from the form returns null values. And i also want to know to acesss data from the dynamic textboxes and insert them.
Thank you.
Your insert statement is incorrect.
insert into assignment_master values (?,?,?,?,?,?,?,?,?,?)
You have to name columns like these:
insert into assignment_master(assignment_id, assignment_name, degree, course, stream, semester, employee_id, file_name, start_date, end_date) values (?,?,?,?,?,?,?,?,?,?)
Same is true in second insert stament:
insert into assignment_subject(?,?)
has to have column names specified.
If you do not specify column names than all columns will be assigned their default values. See [3] for MySQL.
Assuming that you are using MySQL, see INSERT syntax: [1]
For PostgreSQL see [2].
[1] http://dev.mysql.com/doc/refman/5.7/en/insert.html
[2] https://www.postgresql.org/docs/current/static/sql-insert.html
[3] http://dev.mysql.com/doc/refman/5.7/en/insert.html#idm139777556167776
Whenever you upload the form data using Multipart, the request object is converted into a stream, stream of data to be specific.
In such a scenario, you do not get the fields as parameters. They come along with the file data. The code shown below - already present in your code shown handles this:
if (fileItemStream.isFormField()) {
// do field related work
String fieldName = fileItemStream.getFieldName();
InputStream is = fileItemStream.openStream();
byte[] b = new byte[is.available()];
is.read(b);
value = new String(b);
// out.println(fieldName + " : " + value);
}
You can modify this code to create a hashmap of parameters that are present in your form. The code can be like:
HashMap<String,String> myvaluemap = new HashMap();
if (fileItemStream.isFormField()) {
String fieldName = fileItemStream.getFieldName();
InputStream is = fileItemStream.openStream();
byte[] b = new byte[is.available()];
is.read(b);
value = new String(b);
myvaluemap.put(name,value);
}
I have it tested at my end. Let me know if still any further help is required.
For your reference, you can refer to: this link . in the processing uploaded items section. It is not the exact thing, but provides the hint
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.