Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 在数据库中插入新项会生成错误,在null上找不到属性或字段_Spring Mvc_Thymeleaf - Fatal编程技术网

Spring mvc 在数据库中插入新项会生成错误,在null上找不到属性或字段

Spring mvc 在数据库中插入新项会生成错误,在null上找不到属性或字段,spring-mvc,thymeleaf,Spring Mvc,Thymeleaf,我正在学习春天。我正在使用thymeleaf创建一个简单的web应用程序,可以添加、编辑和删除数据库中的用户 我使用一个html页面来显示数据库,使用两个单独的页面来编辑和添加新用户 编辑和删除工作非常完美,但每当我尝试添加用户时,new.html中就会出现错误(new.html包含添加新用户的表单) 错误出现在from atth:text=“@{user.name}”中。从我在网上找到的内容来看,thymelaf不接受空值,但是由于这是一个新对象,我尝试添加的所有值都是空值 有没有办法解决这个

我正在学习春天。我正在使用thymeleaf创建一个简单的web应用程序,可以添加、编辑和删除数据库中的用户

我使用一个html页面来显示数据库,使用两个单独的页面来编辑和添加新用户

编辑和删除工作非常完美,但每当我尝试添加用户时,new.html中就会出现错误(new.html包含添加新用户的表单)

错误出现在from at
th:text=“@{user.name}”
中。从我在网上找到的内容来看,thymelaf不接受空值,但是由于这是一个新对象,我尝试添加的所有值都是空值

有没有办法解决这个问题。代码

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
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());

        }
}

由于您的
user
对象是
null
,因此您将得到该错误

每次有新用户请求时,只需发送一个
newuser()
对象

@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

中有一个
null
用户。我确实消除了null错误,但现在它生成了一个400错误的请求
服务器无法或将不会处理该请求,因为它被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由)。
400表示您的请求本身格式不正确。你可能想看看。
@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;
}
}
@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";
}