当前状态:
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后,他将看不到。
答案 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}"