【问题标题】:Spring Boot & Thymeleaf,passing variables to the controllerSpring Boot 和 Thymeleaf,将变量传递给控制器
【发布时间】:2020-10-21 13:02:39
【问题描述】:

我有一个处理产品购买的控制器,它有两个参数,count - 产品的数量和 id - 用户购买的产品的 ID。

@PostMapping("/buyproduct")
public String buyProduct(@RequestParam int count,@RequestParam long id){
    Product product = productRepository.findById(id);
    int activeCount = product.getCount();
    if (activeCount-count<0){
        return "redirect:/";
    }
    product.setCount(activeCount-=count);
    productRepository.save(product);
    return "redirect:/buyproductsuccessful";
}

在 index.html 中,我使用 Thymeleaf 列出了数据库中所有可用的产品。

<div class="col-12 col-md-6 col-lg-4" th:each="element : ${products}">
        <div class="card">
            <img class="card-img-top" src="https://picsum.photos/362/180" alt="Card image cap">
            <div class="card-body">
                <h5 style="text-align: center" class="card-title" th:text="${element.getName()}"</h5>
                <span th:text="${element.getCost()}"></span></p>
                <span th:text="${element.getCount()}"></span> </p>
                ...

每个产品都有自己的按钮,单击时会打开一个弹出窗口,您需要在其中输入所购买产品的数量和银行数据(我不处理它们,我还不需要它们),然后也是一个隐藏字段,我想在其中放置产品 ID,以便稍后将其传递给控制器​​。

<form action="#" th:action="@{/buyproduct}" th:object="${element}" method="post">
                                <!-- Modal Header -->
                                <div class="modal-header">
                                    <h4 class="modal-title" style="color: #368819"></h4>
                                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                                </div>

                                <!-- Modal body -->
                                <div class="modal-body">
                                    <div>
                                        <input type="hidden" name="id" th:value="*{getId()}">
                                        <label><b>რაოდენობა</b></label><br>
                                        <input class="col-4" type="number" min="1" value="1" name="count" required><br><br>
                                        <label><b></b></label><br>
                                        <input class="col-12" type="text"><br><br>
                                        <label><b></b></label><br>
                                        <input class="col-12" type="date"><br><br>
                                        <label><b>CVV/CVC</b></label><br>
                                        <input class="col-4" type="text"><br><br>
                                    </div>
                                </div>

                                <!-- Modal footer -->
                                <div class="modal-footer">
                                    <button type="submit" class="btn btn-success"></button>
                                    <button type="button" class="btn btn-danger" data-dismiss="modal"></button>
                                </div>
                                </form>

但是 Thymeleaf 每次都会传递第一个产品的 id,我的错误是什么?

【问题讨论】:

  • &lt;input type="hidden" name="id" th:value="*{getId()}"&gt; 你的 getId() 定义在哪里?
  • 同时检查您生成的 HTML 内容以确认页面是否正确呈现(使用正确的动态值)
  • @gtiwari333 getId() 是 Product 实体的 getter。 public long getId() { return id; }

标签: java spring-boot spring-mvc thymeleaf


【解决方案1】:

问题在于 Bootstrap 模态范围。

<button style="margin-left: 40%" type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal">
<div class="modal" id="myModal">

修复后它看起来像这样。

<button style="margin-left: 40%" type="button" class="btn btn-success" data-toggle="modal" th:attr="data-target='#id-' + ${element.getId()}">
<div class="modal" th:id="'id-' + ${element.getId()}">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2018-11-02
    • 2020-04-28
    相关资源
    最近更新 更多