如何使用Thymeleaf和Spring Boot创建动态链接?

时间:2017-06-25 04:54:55

标签: spring spring-boot thymeleaf

所以我一直在用Thymeleaf和Spring Boot在我的电脑上托管一个“网站”,我有一个基本的,不安全的登录,我为了好玩。我目前要做的是创建一个链接,将您带回到基于上一页的上一页,该链接通过模型以字符串形式发送。

以下是几个片段: 在控制器中:

@RequestMapping("/")
public String index(Model model) {
    return ifLoggedIn(model, "home", "");
}

private String ifLoggedIn (Model model, String location, String returnTo) {
    if (Login.loggedIn.getOrDefault(Login.IP(), Boolean.FALSE)) {
        return location;
    } else {
        model.addAttribute("login", new Login());
        model.addAttribute("return_page", returnTo);
        return "login";
    }
}

在loggedin.html文件中(成功登录后):

<body>
    <a th:href="'/' + ${return_page}">Return to previous location</a>
</body>

编辑:

我首先更改loggedin.html文件中的行以遵循Pau建议的内容:

<a th:href="@{'/' + ${return}}">Return to previous location</a>

但是我一直被重定向到server.local / null,所以我尝试删除'/' +并在ifLoggedIn参数内部使用/,所以它会return ifLoggedIn(model, "home", "/",但这也一直让我发送到server.local / null。现在,我只是将loggedin.html文件中的行更改为以下内容:

<a th:if="(${return_page} != null)" th:with="return=(${return_page})" th:href="@{${return}}">Return to previous location</a> 

现在它消失了,这意味着$ {return_page}等于null。回头看一下控制器,我不明白为什么它会返回null。另一件事,我正在重定向回到其他页面,一行说return ifLoggedIn(model, "messages", "/messages",但即使是那些我仍然被发送到server.local / null。

3 个答案:

答案 0 :(得分:5)

您需要使用@{...} Thymeleaf Standard Epression类型的链接表达式。在官方文档中,您可以在9. Using expressions in URLs部分的链接表达式中看到很多使用表达式的示例:

  

没问题!每个URL参数值实际上都是一个表达式,因此您可以轻松地将您的文字替换为任何其他表达式,包括i18n,conditionals ......:

     

...

     

URL基本身可以指定为表达式,例如变量表达式:

     

<a th:href="@{${detailsURL}(id=${order.id})}">

此外,在教程中,4.4 Link URLs部分中有一个与您的表达式类似的表达式:

  

网址基础也可以是评估另一个表达式的结果:

     

...

     

<a th:href="@{'/details/'+${user.login}(orderId=${o.id})}">view</a>

所以在你的情况下,就像下一个:

<body>
    <a th:href="@{'/' + ${return_page}}">Return to previous location</a>
</body>

答案 1 :(得分:2)

您可以使用此 \ n

#控制器#

@GetMapping("/userLogin/{userId}")
public String getUserDeatilsById(@PathVariable("userId") int userId, Model model){
    return "user/userDetails";
 }

#HTML#

<body> <a th:href="@{/userLogin/{userId}(userId=${user.userId})}"></a> </body>

答案 2 :(得分:0)

<body>
    <a th:href="@{'/' + return_page}">Return to previous location</a>
</body>

这对我有用