如何在 HTML 和 Spring boot 中重用一个表单块中的 2 个文本字段到另一个表单块?

问题描述 投票:0回答:1

我是 HTML 和 Spring boot 的新手。

我有这个html表单index.html 我正在尝试构建一个具有加/减和乘法功能的简单计算器。

我有 3 个表单块,它们指向 Java Spring Boot 中的 3 个端点。 我想重用表单块中的 2 个文本字段 num1 和 num2,以便在加法和减法块中进行乘法。 春天该怎么做呢? 目前,在我的代码中,乘法运行良好,但是对于加法和减法,num1 和 num2 值作为 null 传递并引发错误。 “java.lang.NullPointerException:无法调用“java.lang.Integer.intValue()”,因为“num1”为空”

索引.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Calculator</title>
</head>
<body>
    <h1>Simple Calculator</h1>

    <!-- Add form -->
    <form action="/add" method="post">
        <br>
        <button type="submit">Add</button>
    </form>

    <!-- Subtract form -->
    <form action="/subtract" method="post">

        <br>
        <button type="submit">Subtract</button>
    </form>

    <!-- Multiply form -->
    <form action="/multiply" method="post">
        <label for="num1">Number 1:</label> <input type="text" id="num1"
            name="num1" th:value="${num1 != null ? num1 : ''}"> <label
            for="num2">Number 2:</label> <input type="text" id="num2" name="num2"
            th:value="${num2 != null ? num2 : ''}"> <br>
        <button type="submit">Multiply</button>

        <br> <br> <label for="result">Result:</label> <input
            type="text" id="result" th:value="${result}" readonly>
    </form>

</body>
</html>

--Java控制器包 包 com.example.demo;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloWorldController {

    @PostMapping("/add")
    public String add(@RequestParam(value = "num1", required = false) Integer num1, @RequestParam(value = "num2", required = false) Integer num2, Model model) {
        int result = num1 + num2;
        model.addAttribute("result", result);
        model.addAttribute("num1", num1);
        model.addAttribute("num2", num2);
        return "index"; // Return to the same page with updated data
    }

    @PostMapping("/subtract")
    public String subtract(@RequestParam(value = "num1", required = false) Integer num1, @RequestParam(value = "num2", required = false) Integer num2, Model model) {
        int result = num1 - num2;
        model.addAttribute("result", result);
        model.addAttribute("num1", num1);
        model.addAttribute("num2", num2);
        return "index";
    }

    @PostMapping("/multiply")
    public String multiply(@RequestParam(value = "num1", required = false) Integer num1, @RequestParam(value = "num2", required = false) Integer num2, Model model) {
        int result = num1 * num2;
        model.addAttribute("result", result);
        model.addAttribute("num1", num1);
        model.addAttribute("num2", num2);
        return "index";
    }
}
java html spring-boot thymeleaf
1个回答
0
投票

“添加”和“减去”表单中缺少 num1 和 num2 字段。您在“乘”表单中使用这些字段,但不在其他表单中使用这些字段,这就是为什么当您尝试加或减时它们为空。

您需要在所有表单中包含 num1 和 num2 输入字段(加、减、乘)。您可以通过为每个表单重复使用相同的输入字段来做到这一点,因此用户只需输入数字一次,每个操作都可以重复使用这些值。

希望代码有帮助:

<label for="num1">Number 1:</label> 
<input type="text" id="num1" name="num1" th:value="${num1 != null ? num1 : ''}">
<label for="num2">Number 2:</label> 
<input type="text" id="num2" name="num2" th:value="${num2 != null ? num2 : ''}">
<br><br>

<!-- Add form -->
<form action="/add" method="post">
    <input type="hidden" name="num1" th:value="${num1}">
    <input type="hidden" name="num2" th:value="${num2}">
    <button type="submit">Add</button>
</form>

<!-- Subtract form -->
<form action="/subtract" method="post">
    <input type="hidden" name="num1" th:value="${num1}">
    <input type="hidden" name="num2" th:value="${num2}">
    <button type="submit">Subtract</button>
</form>

<!-- Multiply form -->
<form action="/multiply" method="post">
    <input type="hidden" name="num1" th:value="${num1}">
    <input type="hidden" name="num2" th:value="${num2}">
    <button type="submit">Multiply</button>
</form>

<br><br>
<!-- Display result -->
<label for="result">Result:</label> 
<input type="text" id="result" th:value="${result}" readonly>
© www.soinside.com 2019 - 2024. All rights reserved.