Spring Path Variables with Thymeleaf – 使用Thymeleaf的Spring路径变量

最后修改: 2019年 10月 16日

中文/混合/英文(键盘快捷键:t)

1. Introduction

1.绪论

In this short tutorial, we’re going to learn how to use Thymeleaf to create URLs using Spring path variables.

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

We use path variables when we want to pass a value as part of the URL. In a Spring controller, we access these values using the @PathVariable annotation.

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

2. Using Path Variables

2.使用路径变量

First, let’s set up our example by creating a simple Item class:

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

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

    // Constructor and standard getters and setters
}

Now, let’s take create our controller:

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

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

In our index.html template, let’s loop through our items and create links calling the singlePathVariable method:

在我们的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>

The code we just created makes URLs like this:

我们刚刚创建的代码使URL像这样。

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

This is standard Thymeleaf syntax for using expressions in URLs.

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

We can also use concatenation to achieve the same result:

我们也可以使用连接法来达到同样的效果。

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

3. Using Multiple Path Variables

3.使用多个路径变量

Now that we’ve covered the basics of creating a path variable URL in Thymeleaf, let’s quickly cover using multiple.

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

First, we’ll create a Detail class and modify our Item class to have a list of them:

首先,我们将创建一个Detail类,并修改我们的Item类,使其拥有一个列表。

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

    // constructor and standard getters and setters
}

Next, let’s add a list of Detail to Item:

接下来,让我们给Item添加一个Detail的列表。

private List<Detail> details;

Now, let’s update our controller to add a method using multiple @PathVariable annotations:

现在,让我们更新我们的控制器,添加一个使用多个@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";
}

Finally, let’s modify our index.html template to create URLs for each detail record:

最后,让我们修改我们的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. Conclusion

4.总结

In this quick tutorial, we learned how to use Thymeleaf to create URLs with path variables. We started by creating a simple URL with only one. Later, we expanded on our example to use multiple path variables.

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

The example code is available over on GitHub.

示例代码可在GitHub上获得over