【问题标题】:Controller problem with header's data with Spring Boot and ThymeleafSpring Boot 和 Thymeleaf 的标头数据的控制器问题
【发布时间】:2020-12-09 13:19:15
【问题描述】:

所以这是我的问题。 我试图在我的标题中包含动态数据。它应该代表用户在他的购物车中拥有的商品数量。 所以这是我的标题(标题是我包含在 layout.html 中的片段),数据在最后一个 li

<nav >
            <ul>
                <li><a th:href="@{/index}" class="">Home</a></li>
                <li><a th:href="@{/products/list}" class="">Products</a></li>
                <li><a th:href="@{/admin/index}" class="">Admin</a></li>
                <li><a href="" class="">Account</a></li>
                <li><a href="" class="">Contacts</a></li>
                <li><a th:href="@{/login}" class="">Login</a></li>
                <li><a th:href="@{/user-page}" class="">User</a></li>
                <li>
                    <p th:text="${cart.id}"></p>
                </li>
            </ul>
</nav>

但是由于 Web 应用程序的每个页面上都提供了标题,我应该(在控制器中)做什么来获取这些数据? 我试图将购物车数据放入 IndexController 但它不起作用。我对 Spring 和 Thymeleaf 不满意,所以我可能做错了什么,或者我错过了数据绑定的一些内容。我只有一次约束,我不想使用 Ajax 或 Jquery。除非我别无选择,但我对此表示怀疑。这是我在 IndexController 中尝试过的

@GetMapping({"/", "/index", "/home"})
    public String getIndex(Model model) {
        this.userCart.setId(5);
        this.userCart.setNumberItems(11);
        model.addAttribute("cart", userCart);
        model.addAttribute("phrase", "Oui oui si si 92izi");
        model.addAttribute("nbItems", "10");
        return "index";
    }

我还尝试将另一个方法映射到“/”,但它会导致错误,因为我不必将方法映射到相同的 url。那我该怎么办?

【问题讨论】:

    标签: java spring spring-boot web thymeleaf


    【解决方案1】:

    如果你需要一个模型属性应用范围,那么你可以使用 @ControllerAdvice 注释类:

    @ControllerAdvice
    public class GlobalControllerAdvice {
      
      @ModelAttribute("numberOfItemsInCart")
      public int getNumberOfItemsInCart() {
        // get the cart and return the number of items
      }
    
    }
    

    并在您的模板中使用此属性:

    <p th:text="${numberOfItemsInCart}"></p>
    

    如果需要,使用@ModelAttribute 注释的方法也可以将HttpServletRequest request 声明为参数(有关该方法的所有可能参数,请参见https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments)。

    有关@ControllerAdvice 的更多详细信息,请参阅https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-controller-advice

    【讨论】:

    • 我并不是真的需要这个属性应用程序。每当用户的购物车数据在服务器端发生变化时,我只需要更新标题。£类似的东西,但使用 Thymeleaf:youtube.com/watch?v=vQIWt8830Z8
    • 如果您想要动态更新 HTML,那么您需要使用 JavaScript。 Thymeleaf 在服务器上呈现并将生成的 HTML 发送到浏览器。
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多