百里香叶注册页 - 执行处理器'org.thymeleaf.spring4.processor.attr.SpringInputGeneralFieldAttrProcessor'时出错



我正在为一个网站制作注册页面。我知道为了创建新用户,需要一个id,所以我们有以下字段:

<input type="hidden" th:field="{*id} />

但是,当我转到该页面时,我收到了我在这篇文章标题中提到的错误。

这是有问题的表格:

<form th:action="@{/users/register}" th:object="${user}" class="form-signin" method="POST">
    <h2 class="form-signin-heading">Register</h2>
    <input type="hidden" th:field="*{id}" />
    <label for="inputUsername" class="sr-only">Username*</label>
    <input type="text" th:field="*{username}" name="username" id="inputUsername" class="form-control" placeholder="Username" required="required" autofocus="autofocus" />
    <label for="inputEmail" class="sr-only">Email Address*</label>
    <input type="text" th:field="*{email}" name="email" id="inputEmail" class="form-control" placeholder="Email address" required="required" autofocus="autofocus" />
    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" th:field="*{password}" name="password" id="inputPassword" class="form-control" placeholder="Password" required="required" />
    <label for="inputConfirmPassword" class="sr-only">Confirm Password</label>
    <input type="password" th:field="${confirmPassword}" name="confirmPassword" id="inputConfirmPassword" class="form-control" placeholder="Confirm password" required="required" />
    <button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
</form>

这是我的用户控制器:

@RequestMapping("/register")
public String registerAction(Model model) {
    model.addAttribute("user", new User());
    model.addAttribute("confirmPassword", "");
    return "views/users/register";
}
@RequestMapping(value="/register", method = RequestMethod.POST)
public String doRegister(User user) {
    User savedUser = userService.save(user);
    return "redirect:/"; //redirect to homepage
}

用户实体的第一部分:

@Entity
@Table(name = "users")
public class User {
// Default constructor require by JPA
public User() {}
@Column(name = "id")
@Id @GeneratedValue
private Long id;
public void setId(long id) {
    this.id = id;
}
public long getId() {
    return id;
}

据我所知,这里没有任何问题,所以我被困住了。

我正在遵循这个例子:https://github.com/cfaddict/spring-boot-intro

有什么想法吗?

问题在于您声明 id 属性的方式。该字段使用为空的引用类型 Long。吸气器使用原始长。当 Spring 访问 id 字段时,它会尝试将空值拆箱,从而导致错误。将您的域类别更改为

@Entity
@Table(name = "users")
public class User {
    // Default constructor required by JPA
    public User() {}
    @Id
    @Column(name = "id")
    @GeneratedValue
    private Long id;
    public void setId(Long id) {
        this.id = id;
    }
    public Long getId() {
        return id;
    }
}
我不知道

你有没有这样的类

@Controller
@RequestMapping("/users")
public class MyController{
    @RequestMapping("/register")
    public String registerAction(Model model) {
        model.addAttribute("user", new User());
        model.addAttribute("confirmPassword", "");
        return "views/users/register";
    }
    @RequestMapping(value="/register", method = RequestMethod.POST)
    public String doRegister(User user) {
        User savedUser = userService.save(user);
        return "redirect:/"; //redirect to homepage
    }
}

如果你没有@RequestMapping("/users")这是一个问题,如果你的类中没有这个注释,那么百里香叶中的正确动作应该是"@{/register}" 其他明智的你没有用你发布的方法发布端点,换句话说,你应该有一个这样的模板:

<form th:action="@{/register}" th:object="${user}" class="form-signin" method="POST">
    <h2 class="form-signin-heading">Register</h2>
    <input type="hidden" th:field="*{id}" />
    .... should be as you written
    <input type="password" th:field="*{confirmPassword}" id="inputConfirmPassword" class="form-control" placeholder="Confirm password" required="required" />
    <button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
</form>

阅读你的html,你可能应该有th:field="*{confirmPassword}"而不是th:field="${confirmPassword}"。另一个在我看来不起作用的想法是你重复名称属性。我的建议是不要重复,让百里香叶为数据绑定构建正确的属性。

最新更新