详解th:href的使用

一、th:href概述

在使用Thymeleaf进行Web开发时,通过th:href属性可以为HTML标签设定超链接。th:href的值可以是文字、变量或表达式等。

当值为文字时,th:href会把该文字指定为超链接的URL。当值为变量或表达式时,th:href先把该变量或表达式的返回值转换为字符串,再作为超链接的URL。th:href可以在标签中使用。

    
        /* 值为文字 */
        <a th:href="@{http://example.com}">Example

        /* 值为变量 */
        <a th:href="@{${item.url}}">Example

        /* 值为表达式 */
        <a th:href="@{${'/view/'+item.id}}">Example
    

二、th:href的URL处理

th:href支持相对路径、绝对URL和上下文相对URL。

1. 相对路径

相对路径指的是超链接的URL相对于当前URL的位置。通常情况下,相对路径比绝对URL更容易维护。th:href支持相对路径的写法。

    
        /* 当前URL为http://example.com/shop/index.html */
        <a th:href="@{'/shop/cart.html'}">My Cart    /* 相对路径 */
    

2. 绝对URL

绝对URL指的是包括URL协议在内的完整URL地址。例如,http://example.com/shop/cart.html。当使用绝对URL时,可以省略协议和主机名(例如://example.com/shop/cart.html)。

    
        <a th:href="@{'https://example.com/shop/cart.html'}">My Cart    /* 完整URL */

        <a th:href="@{'//example.com/shop/cart.html'}">My Cart        /* 相对协议和主机名 */
    

3. 上下文相对URL

上下文相对URL指的是相对于Web应用程序的根目录的相对URL。在应用程序中使用上下文相对URL可以避免因为更改URL造成的无法链接的问题。

    
        <a th:href="@{'~/shop/cart.html'}">My Cart            /* 上下文相对URL */

        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            mav.addObject("path","~/shop/cart.html");
            return mav;
        }

        /* index.html中使用变量 */
        <a th:href="@{${path}}">My Cart
    

三、th:href的数据绑定

可以使用变量或表达式作为th:href的值,这些值会被自动转换为字符串,并作为超链接的URL。当使用变量时,需要使用${}来引用变量。当使用表达式时,需要使用#{…}来引用表达式。

1. 使用变量作为th:href

    
        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            User user = new User();
            user.setId(1);
            user.setName("Lucy");
            mav.addObject("user",user);
            return mav;
        }

        /* index.html中使用变量 */
        <a th:href="@{'/user/'+${user.id}}">User Info
    

2. 使用表达式作为th:href

    
        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            User user = new User();
            user.setId(1);
            user.setName("Lucy");
            mav.addObject("user",user);
            return mav;
        }

        /* index.html中使用表达式 */
        <a th:href="@{'/user/'+#{user.id}}">User Info
    

四、th:href的URL参数

th:href还可以添加URL参数,用于传递额外的信息。URL参数的格式是?key=value,多个参数之间用&分隔。

    
        /* 当前URL为http://example.com/shop/index.html */
        <a th:href="@{'/shop/cart.html'}">My Cart            /* 无参数 */

        <a th:href="@{'/shop/cart.html(orderId=${order.id})'}">My Cart            /* 单参数 */

        <a th:href="@{'/shop/cart.html(orderId=${order.id},qty=${item.qty})'}">My Cart       /* 多参数 */
    

五、th:href的URL路径格式化

有时候,URL路径中需要替换某些字符。Thymeleaf提供了两种方式来进行URL路径格式化。

1. 使用’/’号进行格式化

    
        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            User user = new User();
            user.setId(1);
            user.setName("Lucy");
            mav.addObject("user",user);
            return mav;
        }

        /* index.html中使用'/'号进行格式化 */
        <a th:href="@{/user/{id}(id=${user.id})}">User Info
    

2. 使用占位符进行格式化

    
        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            User user = new User();
            user.setId(1);
            user.setName("Lucy");
            mav.addObject("user",user);
            return mav;
        }

        /* index.html中使用占位符进行格式化 */
        <a th:href="@{'/user/{id}/info.html'(id=${user.id})}">User Info
    

六、th:href的局部刷新

在开发Web应用时,可能需要使用Ajax技术实现局部刷新。Thymeleaf提供了th:href属性中新的特性,它可以为超链接添加局部刷新的功能。

    
        /* Controller代码 */
        @GetMapping("/index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            User user = new User();
            user.setId(1);
            user.setName("Lucy");
            mav.addObject("user",user);
            return mav;
        }

        /* index.html中使用JS进行局部刷新 */
        <a th:href="@{/user/{id}(id=${user.id})}"
           th:attr="data-url=@{/user/info.ajax(id=${user.id})}"
           onclick="loadData(this)">User Info

        /* JavaScript代码 */
        function loadData(obj) {
            var url = $(obj).data('url');
            $.get(url,function (data) {
                $('#user-info').html(data);
            });
        }
    

七、总结

通过本文的介绍,我们了解了th:href的概述、URL处理、数据绑定、URL参数、URL路径格式化和局部刷新等特性。th:href是Web开发中必不可少的一个属性,掌握它的使用有助于提高Web开发效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/308447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-03 14:49
下一篇 2025-01-03 14:49

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25

发表回复

登录后才能评论