2017-08-30 8 views
0

私は春を学んでいます。私はthymeleafを使って、データベースからユーザを追加、編集、削除するシンプルなWebアプリケーションを作成しています。Thymeleafがデータベースに新しいアイテムを挿入するとエラーが発生するnullでプロパティまたはフィールドが見つかりません

私は、データベースを表示するためにhtmlページを使い、新しいユーザーを編集して追加するために2つのページを使用しています。

編集、完全に仕事を除去するが、私は、ユーザーを追加しようとするたびに、私はnew.htmlでエラーが出る

Property or field xxxx cannot be found on null 

エラーがで現れる(new.htmlは、新しいユーザーを追加するためのフォームが含まれています) from th:text="@{user.name}"。私はオンラインthymelafがnull値を取らないことを発見しましたが、これは新しいオブジェクトであるため、すべての値をnullにすることを追加しようとしています。

これを解決する方法はありますか?コード。

new.html

<!DOCTYPE html> 
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8"> 
    <title>New User</title> 
</head> 
<body> 
<form method="post" name="comment_form" id="comment_form" th:action="@{/create}" role="form"> 
    Name:<br> 
    <input type="text" name="name" th:text="${user.name}"><br> 
    Age:<br> 
    <input type="text" name="age" th:text="${user.age}"><br> 
    Email: <br> 
    <input type="text" name="email" th:text="${user.email}"><br> 
    <button type="submit" id="submit" class="btn btn-primary">Submit</button> 
</form> 
</body> 
</html> 

コントローラ

@Autowired 
UserService service; 
    @RequestMapping(value="user/new", method = RequestMethod.GET) 
public String newUser(Long id, Model md) { 
    Users user = service.findOne(id); 
    md.addAttribute("user", user); 
    return "new"; 
} 

@RequestMapping(value = "/create", method = RequestMethod.POST) 
public String create(@RequestParam("id") Long id, @RequestParam("name") String name, @RequestParam("age") int age, 
        @RequestParam("email") String email, Model md) { 
    md.addAttribute("users", service.addOrUpdate(new Users(id, name, age))); 
    return "redirect:/user"; 
} 

Serviceクラス

@Autowired 
JdbcTemplate template; 
public Users findOne(Long id) 
{ 
    String sql = "select * from people where id=" +id; 
    return template.query(sql, new ResultSetExtractor<Users>() { 
     @Override 
     public Users extractData(ResultSet resultSet) throws SQLException, DataAccessException { 
      if (resultSet.next()) { 
       Users user = new Users(resultSet.getLong("id"), 
         resultSet.getString("name"), 
         resultSet.getInt("age")); 
       String email = resultSet.getString("email"); 
       if (email != null) { 
        user.setEmail(email); 
       } 
       return user; 
      } 
      return null; 
     } 
    }); 


} 

public int addOrUpdate(Users user){ 
     if (user.getId() > 0) { 
      String sql = "UPDATE people SET name=?, age =?, email=? WHERE id=" +user.getId(); 
      System.out.println(sql); 
      return template.update(sql, user.getName(), user.getAge(), user.getEmail()); 

     } else { 
      String sql = "INSERT INTO people (name, age, email) VALUES (?, ?, ?)"; 
      System.out.println(sql); 
      return template.update(sql, user.getName(), user.getAge(), user.getEmail()); 

     } 
} 

ユーザー(モデル)

package ro.database.jdbcTest.model; 


import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

public class Users { 

@Id 
@GeneratedValue(strategy= GenerationType.AUTO) 
private Long id; 
private String name; 
private int age; 
private String email; 


public Long getId() { 
    return id; 
} 

public String getName() { 
    return name; 
} 

public int getAge() { 
    return age; 
} 

public String getEmail() { 
    return email; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public Users(Long id, String name, int age){ 
    this.id=id; 
    this.name=name; 
    this.age=age; 
} 

public void setEmail(String email){ 
    this.email=email; 
} 
} 

答えて

1

userオブジェクトがnullなので、そのエラーが発生しています。

あなたがする必要があるのは、新しいユーザーとのリクエストが来るたびにnew User()オブジェクトを送信することだけです。

@RequestMapping(value="user/new", method = RequestMethod.GET) 
public String newUser(Long id, Model md) { 
    Users user = null; 
    if(id > 0) { // Id is present, fetch from the database. 
     user = service.findOne(id); 
    } else { // Create a new user. 
     user = new User(); 
    } 
    md.addAttribute("user", user); 
    return "new"; 
} 

あなたはそれが一種の仕事をnew.html

+0

nullユーザーを持つことはありません上記の方法を使用します。私はnullエラーを取り除きましたが、現在は400 Badのリクエストを生成します。 'サーバは、クライアントのエラーと思われる何らかの理由でリクエストを処理できないか、または処理しません(例えば、不正なリクエスト構文、無効なリクエストメッセージフレーミング、不正なリクエストルーティング)。 – Adi

+1

400は、リクエスト自体がうまく構成されていないことを意味します。 [this](https://stackoverflow.com/q/19671317/3094731)をチェックしてください。 –

関連する問題