2017-08-01 23 views
0

JSPサイトからmvcコントローラに変数を渡す際に問題があります。下に私のJSPページと対応するMVCコントローラが表示されます。私はデータを取得することができましたが、私の意図は、ユーザが入力したデータをサイトにデータベースに挿入し、それを他のサイトに表示することです。私はvaariablesの値を取得することができたが、私は自分のSQLクエリをクラッシュするnullに設定されているサイトを開く第一回。送信ボタンをクリックしている間に値を変数に設定する方法はありますか? Residents.javaJSPからspring mvcへの値渡しコントローラエラー

addCustomer.jsp

ERROR

There was an unexpected error (type=Internal Server Error, status=500). 
No message available 

<%@ 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> 

:また、私は(下記のコードのように)NULL値を除外するならば、私は次のエラーを取得するを作ってみましたしながら、

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に変更しても問題は解決しません。以下のエラーコード:あなたのコントローラクラスで次に、この

<form:form method="POST" action="addCustomer" commandName="Residents"> 

のようなあなたのaddCustomer.jspページで

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] 
+1

フォーム提出の場合は、メソッドを使用し、メソッドを取得しない – Perry

+0

あなたの方法を試しても、それでも動作しません。 – elec

答えて

0

使用Postメソッド、@ModelAttributeがautoのごaddCustomer.jspフォーム要素を結合することに注意がResidentsを対応する属性値クラス属性。だから、これらのすべてを行う必要はありませんrequest.getParameter("checkOutDate")。あなたが正しく行ったように、addCustomerメソッドにパラメータとして@ModelAttribute("Residents") Residents residentsを渡すだけで、春はすでにそれを行っています。

だから先に行くとあなたがJSPフォーム内のすべての入力タグに<form:input path="" />を追加する必要があり、この

@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 

} 
0

のような値を取得します。

関連する問題