Spring Thymeleaf缩短url(form-get)参数

时间:2019-05-28 19:06:54

标签: java spring thymeleaf

当前状态:

https://localhost:8443/workaround/?query=dasda&atn=s&filterSoftwareType=ANY .....

所需状态: https://localhost:8443/workaround/ q = dasda&atn = s& fst = ANY .....

使用q代替查询,使用fst代替filterSoftwareType来缩短网址

我的百里香html 看起来像这样,简短的示例:

<form action="#" class="card card-sm rounded"
                  method="get"
                  th:action="@{${T(com.bisciak.workaround.util.Utils).MAPPING_INDEX}}" th:object="${search}">

     <div class="col">
           <input class="form-control form-control-lg form-control-borderless"
                               placeholder="Search here"
                               style="padding-left: 1rem"
                               th:field="${search.query}" type="search"/>
     </div> etc...

控制器

  @GetMapping(value = Utils.MAPPING_INDEX, params = "atn=s")
 public ModelAndView indexActionSearch(@ModelAttribute(name = "s") Optional<Search> search .....

搜索对象具有查询等属性,我肯定不想重命名这些对象!我只想使用简短版本的URL来命名代码,这简直太可怕了。

有人知道该怎么做吗?我已经尝试了对输入芽没有帮助的name属性:/。

我还希望将内容保留在表单中,以便自动构建url。 我也想将其保留为获取而不是发布,因此用户可以通过URL栏中的复制粘贴等轻松共享此链接。使用post后,他将看不到。

1 个答案:

答案 0 :(得分:1)

th:field属性用于轻松地从Java对象构建表单,并使字段使用相同的名称回发,以便可以将这些值自动分配回相同类型的Java对象,在服务器上。

如果您要使用其他名称,则说明您不是出于预期目的使用它,所以请停止使用它。

如果您查看文档7.2 Inputs,则会看到th:fields的作用:

  

现在让我们看看如何向表单添加输入内容:

     
<input type="text" th:field="*{datePlanted}" />
     

...在这种情况下(input[type=text]),上面的代码行类似于:

     
<input type="text" id="datePlanted" name="datePlanted" th:value="*{datePlanted}" />

因此,更改您的代码以执行此操作:

<form ... th:object="${search}">

    <input ... name="q" th:value="*{query}"/>

您是否还需要id="q"取决于您。

请注意,如果您使用th:value="${search.query}",则不需要th:object="${search}"