【问题标题】:Parse a list of object to thymeleaf template, and return one Object将对象列表解析为 thymeleaf 模板,并返回一个对象
【发布时间】:2016-02-23 10:36:26
【问题描述】:

我向我的模型添加一个属性并返回页面。在 admin.html 页面中,我遍历所有用户并在那里显示详细信息。但我想将列表中的一位用户返回到"/admin/showReports"

我希望有人可以帮助我。我真的被卡住了。

控制器

@RequestMapping(value = "/admin")
public String showAllUser(Model model) {
    model.addAttribute("allUser",userDelegate.getAllUser());
    return "admin";
}

@RequestMapping(value = "/admin/showReports", method = RequestMethod.POST)
public String showAllAvailableReportsForUser(Model model, User user) {
    model.addAttribute("user", user);
    model.addAttribute("reports", userDelegate.getAllReports());
    return "addReports";
}

admin.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Admin</title>
    <link rel="stylesheet" href="/webjars/bootstrap/3.3.6/css/bootstrap.css"/>
    <script src="/webjars/bootstrap/3.3.6/webjars-requirejs.js"></script>
</head>
<body>
    <h1>Admin</h1>
    <div class="container">
        <div class="col-md-1"></div>
        <div class="panel panel-default col-md-10">
            <div class="panel-heading">User</div>
            <table class="table">
                <tr>
                    <th>Id</th>
                    <th>Username</th>
                    <th>E-mail</th>
                    <th>Reports</th>
                </tr>
                <tr th:each="user : ${allUser}">
                    <td th:text="${user.identifier}"></td>
                    <td th:text="${user.username}"></td>
                    <td th:text="${user.email}"></td>
                    <td th:text="${user.reports}"></td>
                    <form th:action="@{/admin/showReports}" method="post">
                        <td>
                            <!--Here is the Problem. How do i return one user from the list?-->
                            <input type="hidden" th:value="${user}" />
                            <button type="submit">edit</button>
                        </td>
                    </form>
                </tr>
            </table>
        </div>
        <div class="col-md-1"></div>
    </div>
</body>
</html>

ThymeleafConfig

@Bean
public SpringResourceTemplateResolver templateResolver(){
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setPrefix("classpath:/templates/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode("HTML5");
    resolver.setOrder(1);
    return resolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setTemplateResolver(templateResolver());
    engine.addDialect(new LayoutDialect());
    return engine;
}

@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setTemplateEngine(templateEngine());
    return resolver;
}

【问题讨论】:

    标签: spring spring-mvc spring-boot thymeleaf


    【解决方案1】:

    您可以通过您的网址传递一个唯一标识符来解决您的问题。

    通过 id 的示例,请注意更改为 GET,因此只需放置链接而不是表单。

    @RequestMapping(value = "/admin/showReports/{id}", method = RequestMethod.GET)
    public String showAllAvailableReportsForUser(Model model, @PathVariable("id") Long id) {
        User user = userDelegate.getUserById(id); // Get user via id
        mav.addObject("user", user);
        // Get and add whatever else you need
        return "addReports";
    }
    

    【讨论】:

    • 我不能自己返回用户对象而不是标识符吗?
    • 好吧,我想理论上它可能会起作用,如果您将每个属性都设置为隐藏并使用@ModelAttribute,但只要诚实地选择路径变量即可。不要把事情复杂化。
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2016-11-13
    • 2018-08-05
    • 1970-01-01
    • 2020-10-09
    • 2018-07-14
    • 2017-09-13
    • 2018-01-04
    相关资源
    最近更新 更多