【问题标题】:How to create a dynamic link with Thymeleaf and Spring Boot?如何使用 Thymeleaf 和 Spring Boot 创建动态链接?
【发布时间】:2017-11-28 07:48:45
【问题描述】:

所以我一直在使用 Thymeleaf 和 Spring Boot 在我的计算机上创建一个“网站”,并且我有一个基本的、不安全的登录,我只是为了好玩。我目前正在尝试做的是创建一个链接,将您带回到基于前一个页面的链接,该链接通过模型作为字符串发送。

这里有几个sn-ps: 在控制器中:

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

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

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

编辑:

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

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

但我一直被重定向到 server.local/null,所以我尝试删除 '/' + 并在 ifLoggedIn 参数中添加 /,所以它会是 return ifLoggedIn(model, "home", "/",但这也一直将我发送到 server.local /空值。现在,我只是将 login.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。

【问题讨论】:

    标签: spring spring-boot thymeleaf


    【解决方案1】:

    你可以使用这个:

    控制器

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

    HTML

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

    【讨论】:

      【解决方案2】:
      <body>
          <a th:href="@{'/' + return_page}">Return to previous location</a>
      </body>
      

      这对我有用

      【讨论】:

        【解决方案3】:

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

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

        ....

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

        &lt;a th:href="@{${detailsURL}(id=${order.id})}"&gt;

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

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

        ...

        &lt;a th:href="@{'/details/'+${user.login}(orderId=${o.id})}"&gt;view&lt;/a&gt;


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

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

        【讨论】:

        • 感谢您的帮助,但那段代码对我不起作用。它没有将我发送到上一个链接 (server.local/messages),而是将我发送到 server.local/null。这是否可能是因为我将字符串设置为该值?
        猜你喜欢
        • 2015-07-01
        • 2020-11-26
        • 2018-08-16
        • 1970-01-01
        • 2017-04-12
        • 2019-04-21
        • 2017-07-06
        • 1970-01-01
        • 2017-09-02
        相关资源
        最近更新 更多