Thymeleaf拼接URL,字符和请求参数使用

使用Thymeleaf来创建一个

http://localhost:8081/news/list/all?page=1&size=10

这样的url,现在希望“all”、“page”、“size”变化,其他的不变:“all”可能自身变为其他字符串,如"top",而“page”“size”只改变数值,如"3"和"30"。结果希望变为:

http://localhost:8081/news/list/top?page=3&size=30

解决方案:
Controller如下,“all”其实就是下面的type变量,通过

model.addAttribute("type", type)

传给前端,“page”“size”作为请求参数@RequestParam:

/**
 * 查询所有新闻
 * @return 新闻列表
 */
@GetMapping("list/all")
public String listAll(Model model,
                      @RequestParam(value = "page", defaultValue = PAGE_DEFAULT) Integer page,
                      @RequestParam(value = "size", defaultValue = SIZE_DEFAULT) Integer size) {
    String type = "all";
    logger.info("List news:" + type);
    PageHelper.startPage(page, size);
    List<News> list = mNewsService.selectAll();
    PageInfo<News> pageInfo = new PageInfo<>(list);
    model.addAttribute("type", type);
    model.addAttribute("newsList", list);
    int pages = pageInfo.getPages();
    model.addAttribute("indexPage", page < 0 ? 1 : (page > pages ? pages : page));
    model.addAttribute("size", size);
    model.addAttribute("totalPage", pages);
    return "list/index";
}

前端的话,【绝对路径】th:href中是@{/news/list/}那么url会映射成:

http://localhost:8081  +   /news/list/

【相对路径】如果去掉第一个斜杠@{news/list/},从以上的Controller路径点击,则url会映射成:

http://localhost:8081/news/list/ + /news/list/

我们这里使用绝对路径,如下:

<a th:href="@{/news/list/{type}(type=${type},page=${indexPage},size=${size})}">上一页</a>

括号里的表示括号左边被大括号包起来的变量应该取得值,这里:

  • type会被后端传来的type变量值赋值,
  • page会被后端传来的indexPage变量值赋值,
  • size会被后端传来的size变量值赋值。
    它们作用的结果:
  1. 如果括号前出现了对应的大括号变量,映射时会替换掉,这里如果传来的type为"top",则映射的url对应位置为/news/list/top
  2. 如果括号前没有出现对应的大括号变量,则会将括号里对应的变量变为url参数形式,即?page=1&size=10

如果按照我以上的th:href点击,最终得到的url映射为:

http://localhost:8081/news/list/all?page=1&size=10

如果后端传参:

type = "top";
indexPage = "3";
size = "30";

那么url会变为:

http://localhost:8081/news/list/top?page=3&size=30

参考链接:
https://blog.csdn.net/u010992313/article/details/96102790

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Thymeleaf表示Ajax请求URL时,你可以使用Thymeleaf的内联表达式语法。下面是一个例子,演示如何在JavaScript代码中使用Thymeleaf表示Ajax请求URL: ```javascript var url = /*[[@{/mycontroller}]]*/ ''; $.ajax({ url: url, type: 'GET', success: function(data) { console.log(data); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus); } }); ``` 在这个例子中,我们使用Thymeleaf的内联表达式语法`/*[[@{/mycontroller}]]*/`表示Web应用程序的根路径加上`/mycontroller`这个路径。Thymeleaf会自动添加上下文路径,因此你不需要担心上下文路径的问题。 需要注意的是,在使用Thymeleaf表示Ajax请求URL时,你需要在JavaScript代码中将Thymeleaf的内联表达式语法包含在注释中。这是因为Thymeleaf的内联表达式语法与JavaScript的语法冲突,如果你直接在JavaScript代码中使用Thymeleaf的内联表达式语法,会导致JavaScript语法错误。 另外,你也可以在HTML中使用Thymeleaf表示Ajax请求URL,例如: ```html <button th:onclick="'myFunction(/*[[@{/mycontroller}]]*/)'">Click Me</button> ``` 在这个例子中,我们使用Thymeleaf的内联表达式语法`/*[[@{/mycontroller}]]*/`表示Web应用程序的根路径加上`/mycontroller`这个路径,并将它作为参数传递给一个JavaScript函数。Thymeleaf会自动添加上下文路径。需要注意的是,你仍然需要将Thymeleaf的内联表达式语法包含在注释中,以避免JavaScript语法错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值