[英]Passing value from JSP to spring mvc controller error
我在將變量從JSP站點傳遞到mvc控制器時遇到問題。 在下面,您可以看到我的JSP頁面和相應的mvc控制器。 我設法獲取了數據,但我的意圖是將用戶在站點上輸入的數據插入數據庫並在其他站點上顯示。 我設法獲取了變量的值,但是第一次打開站點時,它們被設置為null,這使我的SQL查詢崩潰。 單擊提交按鈕時,是否可以將值設置為變量? 另外,雖然我嘗試使if排除空值(例如下面的代碼),但出現以下錯誤:
錯誤
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>
居民.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控制器
@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";
}
從GET更改為POST無法解決問題。 錯誤代碼如下:
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]
像這樣在您的addCustomer.jsp
頁面中使用Post方法
<form:form method="POST" action="addCustomer" commandName="Residents">
然后在Controller類中,請注意@ModelAttribute將自動將您的addCustomer.jsp
表單元素屬性值與相應的Residents
類屬性綁定。 因此,您不必執行所有這些request.getParameter("checkOutDate")
。 Spring已經通過將@ModelAttribute("Residents") Residents residents
作為參數正確地傳遞給addCustomer
方法來addCustomer
這一點,就像您正確所做的那樣。
因此,只需繼續檢索這樣的值
@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表單中的所有輸入標簽中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.