简体   繁体   中英

Passing value from JSP to spring mvc controller error

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM