Thymeleaf的Spring路径变量

2023/05/19

1. 简介

在这个简短的教程中,我们将学习如何使用Thymeleaf使用Spring路径变量创建URL。

当我们想要将值作为URL的一部分传递时,我们使用路径变量。在Spring控制器中,我们使用@PathVariable注解访问这些值。

2. 使用路径变量

首先,让我们通过创建一个简单的Item类来设置我们的示例:

public class Item {
    private int id;
    private String name;

    // Constructor and standard getters and setters
}

现在,让我们来创建我们的控制器:

@Controller
public class PathVariablesController {

    @GetMapping("/pathvars")
    public String start(Model model) {
        List<Item> items = new ArrayList<Item>();
        items.add(new Item(1, "First Item"));
        items.add(new Item(2, "Second Item"));
        model.addAttribute("items", items);
        return "pathvariables/index";
    }

    @GetMapping("/pathvars/single/{id}")
    public String singlePathVariable(@PathVariable("id") int id, Model model) {
        if (id == 1) {
            model.addAttribute("item", new Item(1, "First Item"));
        } else {
            model.addAttribute("item", new Item(2, "Second Item"));
        }

        return "pathvariables/view";
    }
}

在我们的index.html模板中,让我们遍历我们的项目并创建调用singlePathVariable方法的链接:

<div th:each="item : ${items}">
    <a th:href="@{/pathvars/single/{id}(id = ${item.id})}">
        <span th:text="${item.name}"></span>
    </a>
</div>

我们刚刚创建的代码生成如下URL:

http://localhost:8080/pathvars/single/1

这是在URL中使用表达式的标准Thymeleaf语法。

我们也可以使用连接来达到相同的结果:

<div th:each="item : ${items}">
    <a th:href="@{'/pathvars/single/' + ${item.id}}">
        <span th:text="${item.name}"></span>
    </a>
</div>

3. 使用多个路径变量

现在我们已经介绍了在Thymeleaf中创建路径变量URL的基础知识,让我们快速介绍一下使用多个路径变量。

首先,我们将创建一个Detail类并修改我们的Item类以获得它们的列表:

public class Detail {
    private int id;
    private String description;

    // constructor and standard getters and setters
}

接下来,让我们向Item添加一个Detail列表:

private List<Detail> details;

现在,让我们更新我们的控制器以添加一个使用多个@PathVariable注解的方法:

@GetMapping("/pathvars/item/{itemId}/detail/{dtlId}")
public String multiplePathVariable(@PathVariable("itemId") int itemId, @PathVariable("dtlId") int dtlId, Model model) {
    for (Item item : items) {
        if (item.getId() == itemId) {
            model.addAttribute("item", item);
            for (Detail detail : item.getDetails()) {
                if (detail.getId() == dtlId) {
                    model.addAttribute("detail", detail);
                }
            }
        }
    }
    return "pathvariables/view";
}

最后,让我们修改我们的index.html模板来为每个详细记录创建URL:

<ul>
    <li th:each="detail : ${item.details}">
        <a th:href="@{/pathvars/item/{itemId}/detail/{dtlId}(itemId = ${item.id}, dtlId = ${dtl.id})}">
            <span th:text="${detail.description}"></span>
        </a>
    </li>
</ul>

4. 总结

在本快速教程中,我们学习了如何使用Thymeleaf创建带有路径变量的URL。我们首先创建一个只有一个的简单URL。后来,我们扩展了示例以使用多个路径变量。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章