【问题标题】:How to make a form with the Post method and pass from it an Integer value to the controller?如何使用 Post 方法制作表单并将 Integer 值传递给控制器​​?
【发布时间】:2018-01-27 18:57:30
【问题描述】:

我想创建一个包含单个 Number 类型字段的表单,并通过 POST 方法将其值传递给控制器​​。

UserController.java

@GetMapping("/users/{id}")
public String showUserProfile(@PathVariable final Long id, Model model) {
    model.addAttribute("user", userService.getUserById(id));
    model.addAttribute("howMuchToIncrease", new Integer(0));
    return "user/user_item";
}

@PostMapping("/users/{id}/refill")
public String showButtonTopUpBalance(@PathVariable final Long id,
                                     @ModelAttribute("howMuchToIncrease") Integer howMuch) {
    userService.topUpBalance(id, howMuch);
    return "redirect:/users/" + id;
}

用户/user_item.html

<form role="form" method="post" th:object="${howMuchToIncrease}"
  th:action="@{'/users/{id}/refill' (id=${user.id})}">
    <input type="number" th:field="${howMuchToIncrease}"/>
    <button type="submit">To Up Balance</button>
</form>

但是在我按下确认按钮后,一切都以这个错误结束:

无法实例化 [java.lang.Integer]:未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: java.lang.Integer.() org.springframework.beans.BeanInstantiationException:无法实例化[java.lang.Integer]:未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: java.lang.Integer.()

【问题讨论】:

  • 哪一行导致了异常?以及用户id的类型是什么
  • @esprittn 第二种方法的签名,我想。长型

标签: java spring-boot thymeleaf


【解决方案1】:

th:object 必须引用一个bean,在你的情况下它是一个值。值不是 java bean。

尝试以下方法:

我。添加一个 bean 类:

public class IncreaseData {
    private int howMuchToIncrease = 0;

    public int getHowMuchToIncrease() {
        return howMuchToIncrease;
    }

    public void setHowMuchToIncrease(int howMuchToIncrease) {
        this.howMuchToIncrease = howMuchToIncrease;
    }
}

二。使用它来代替 Integer 实例:

model.addAttribute("increaseData", new IncreaseData());

public String showButtonTopUpBalance(@PathVariable final Long id,
                                     @ModelAttribute("increaseData") IncreaseData howMuch) {

三。在您的模板中:

<form role="form" method="post" th:object="${increaseData}"
  th:action="@{'/users/{id}/refill' (id=${user.id})}">
    <input type="number" th:field="*{howMuchToIncrease}"/>
    <button type="submit">To Up Balance</button>
</form>

(注意th:field 中的星号)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多