I am having problem with passing variable from JSP site to mvc controller. Below you can see my JSP page and corresponding mvc controller. I managed to get data, but my intention is to insert data entered by user on site into database and display it on other site. I managed to get values of the vaariables but 1st time i open the site they are set to null which crashes my sql query. Is there a way to set values to variables while I click on submit button? Also while I tried to make an if to exclude null values(like in the code below) I get following error:
ERROR
There was an unexpected error (type=Internal Server Error, status=500).
No message available
addCustomer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Add Customer</title>
</head>
<body>
<body>
<form:form method="GET" action="addCustomer" commandName="Residents">
<div align="center">
<h2> Add Customer </h2>
<table>
<tr>
<td>First Name</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>Surame</td>
<td><input type="text" name="surname" /></td>
</tr>
<tr>
<td>Check in Date</td>
<td><input type="date" name="checkInDate"</td>
</tr>
<tr>
<td>Check out Date</td>
<td><input type="date" name="checkOutDate"</td>
</tr>
<tr>
<td>Email</td>
<td><input type="email" name="email"></td>
</tr>
<tr>
<td>Id</td>
<td><input type="number" name="residentId"></td>
</tr>
<tr>
<td>Room ID</td>
<td><input type="number" name="roomId"</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="send" /></td>
<td/>
<td><input type="submit" value="Cancel"/></td>
</tr>
</table>
<div style="color: red">${error}</div>
</div>
</form:form>
</body>
</html>
Residents.java
package com.stapor.bartlomiej.Model;
import java.sql.Date;
/**
* Created by Bartek on 2017-07-30.
*/
public class Residents {
private String name;
private String surname;
private Date checkInDate;
private Date checkOutDate;
private String email;
private int id;
private int roomId;
public Residents(int id, String name, String surname, Date checkInDate, Date checkOutDate, String email, int roomId) {
this.name = name;
this.surname = surname;
this.checkInDate = checkInDate;
this.checkOutDate = checkOutDate;
this.email = email;
this.id = id;
this.roomId = roomId;
}
public Residents(String name, String surname, Date checkInDate, Date checkOutDate, String email, int roomId) {
this.name = name;
this.surname = surname;
this.checkInDate = checkInDate;
this.checkOutDate = checkOutDate;
this.email = email;
this.roomId = roomId;
}
public Residents() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Date getCheckInDate() {
return checkInDate;
}
public void setCheckInDate(Date checkInDate) {
this.checkInDate = checkInDate;
}
public Date getCheckOutDate() {
return checkOutDate;
}
public void setCheckOutDate(Date checkOutDate) {
this.checkOutDate = checkOutDate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getRoomId() {
return roomId;
}
public void setRoomId(int roomId) {
this.roomId = roomId;
}
@Override
public String toString() {
return String.format(
"Id: %d<br>Name: %s<br>Surname: %s<br>Check In Date: %s<br>Check Out Date: %s<br>E-mail: %s<br>Room ID: %d<br>",
id, name, surname, checkInDate, checkOutDate, email, roomId);
}
}
MVC Controller
@RequestMapping(value = "/addCustomer", method = RequestMethod.GET)
public String addCustomer(@ModelAttribute("Residents") Residents residents, HttpServletRequest request)
{
//System.out.println(name + "\n" + surname + "\n" + checkInDate + "\n" + checkOutDate + "\n" + email + "\n" + residentId + "\n" + roomId);
//System.out.println(request.getParameter("checkInDate"));
String[] params = {request.getParameter("checkInDate"),
request.getParameter("checkOutDate"),
request.getParameter("name"),
request.getParameter("surname"),
request.getParameter("residentId"),
request.getParameter("email"),
request.getParameter("roomId")
};
for(String k : params)
{
System.out.println(k);
}
if(params[0].isEmpty())
{
System.out.println("shiet");
}
else
{
String sql = "insert into residents(Check_in_Date, Check_out_Date, Name, Surname, ResidentId, email, roomId) values " +
"('" + params[0] + "', '" + params[1] +
"', '" + params[2] + "', '" + params[3] + "', '" +
params[4] + "', '" + params[5] + "', " + params[5] + ");";
jdbcTemplate.batchUpdate(sql);
}
//System.out.println("" + request.getParameter("name"));
// map.put("residents", residents);
// map.put("name", request.getParameter("name"));
return "addCustomer";
}
Changing from GET to POST does not solve the problem. Error code below:
There was an unexpected error (type=Internal Server Error, status=500).
StatementCallback; SQL [insert into residents(Check_in_Date, Check_out_Date, Name, Surname, ResidentId, email, roomId) values ('null', 'null', 'null', 'null', 'null', 'null', null);]; Cannot parse "DATE" constant "null"; SQL statement: insert into residents(Check_in_Date, Check_out_Date, Name, Surname, ResidentId, email, roomId) values ('null', 'null', 'null', 'null', 'null', 'null', null) -- ('null', 'null', 'null', 'null', 'null', 'null', NULL) [22007-191]; nested exception is org.h2.jdbc.JdbcBatchUpdateException: Cannot parse "DATE" constant "null"; SQL statement: insert into residents(Check_in_Date, Check_out_Date, Name, Surname, ResidentId, email, roomId) values ('null', 'null', 'null', 'null', 'null', 'null', null) -- ('null', 'null', 'null', 'null', 'null', 'null', NULL) [22007-191]
Use Post method in your addCustomer.jsp
page like this
<form:form method="POST" action="addCustomer" commandName="Residents">
Then in your Controller class, note that @ModelAttribute will auto bind your addCustomer.jsp
form element attributes values with the corresponding Residents
class attributes. So you don't have to do all those request.getParameter("checkOutDate")
. Spring has done that already just by passing @ModelAttribute("Residents") Residents residents
as a parameter to addCustomer
method like you rightly did.
So just go ahead and retrieve the values like this
@RequestMapping(value = "/addCustomer", method = RequestMethod.POST)
public String addCustomer(@ModelAttribute("Residents") Residents residents){
//Just some printouts for confirmation
System.out.println(residents.getName());
System.out.println(residents.getSurname());
//Persist data
}
您需要将<form:input path="" />
到JSP表单中的所有输入标签中。
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.