首页 > 解决方案 > 带有参数的thymeleaf 3表单操作URL和get方法不起作用

问题描述

我在 Spring Boot 2 Web 应用程序中使用 Thymeleaf 3。下面是表单代码:

<form data-th-action="@{/props/r(pg=3)}" method="get">
        <div class="form-check form-check-inline">
          <input class="form-check-input" type="checkbox"    name="pt" id="p1" value="pr">
          <label class="form-check-label" for="p1">P1</label>
        </div>
        <div class="form-check form-check-inline">
          <input class="form-check-input" type="checkbox"    name="pt" id="p2" value="pr2">
          <label class="form-check-label" for="p2">P2</label>
        </div>
        <button type="submit" class=" mb-4">Search</button>
      </form>

不幸的是,当我对表单使用 get 方法时,它不会在提交的 URL 中附加 ?pg=3,URL 看起来像 /props/r? 如果没有选中复选框。如果选中复选框,则 URL 看起来像 /props/r?pt=p1

pg=3 部分丢失。

如何解决这个问题?

标签: spring-bootthymeleaf

解决方案


问题是你有一个动作@{/props/r(pg=3)}——它转化为/props/r?pg=3你的形式也是方法get。如果您在表单的动作和正文中都有参数(并使用method="get"),浏览器将不会组合它们。相反,动作的参数被移除并替换为表单主体中的参数。

这就是为什么?pg=3被删除并替换为复选框参数的原因。要么post改用,要么pg作为隐藏的表单元素包含在内。


推荐阅读