私は春を学んでいます。私は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;
}
}
で
null
ユーザーを持つことはありません上記の方法を使用します。私はnullエラーを取り除きましたが、現在は400 Badのリクエストを生成します。 'サーバは、クライアントのエラーと思われる何らかの理由でリクエストを処理できないか、または処理しません(例えば、不正なリクエスト構文、無効なリクエストメッセージフレーミング、不正なリクエストルーティング)。 – Adi400は、リクエスト自体がうまく構成されていないことを意味します。 [this](https://stackoverflow.com/q/19671317/3094731)をチェックしてください。 –