DK1990
DK1990

Reputation: 478

Parse a list of object to thymeleaf template, and return one Object

I add an attribute to my model and returning the the page. In the admin.html page i iterate through all users and show there details. But i want to return one user out of the list back to "/admin/showReports".

I hope someone can help me. I'am literally stuck.

Controller

@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;
}

Upvotes: 0

Views: 1894

Answers (1)

Lukehey
Lukehey

Reputation: 1354

You can pass an unique identifier via your url to solve your problem.

Example via id, mind the change to GET so just place a link instead of the form.

@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";
}

Upvotes: 1

Related Questions