Najprostszym rozwiązaniem jest łączenie "requestURI" i "queryString". Oto przykład:
<div th:with="currentUrl=(${#httpServletRequest.requestURI + '?' + #strings.defaultString(#httpServletRequest.queryString, '')})">
<a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>
Wynik dla "http://localhost:8080/some-page?param1=1 ":
http://localhost:8080/some-page?param1=1&myparam=test
Wynik dla" http://localhost:8080/some-page":
http://localhost:8080/some-page?&myparam=test
wadę:
Thymeleaf nie nadpisuje parametry - dodaje tylko parametry do adresu URL. Więc jeśli użytkownik kliknij ponownie do tego adresu URL, wynik będzie:
http://localhost:8080/some-page?param1=1&myparam=test&myparam=test
Referencje:
http://forum.thymeleaf.org/How-to-link-to-current-page-and-exchange-parameter-td4024870.html
EDIT:
Oto obejście, które usuwa parametr "myparam" z adresu URL:
<div th:with="currentUrl=(${@currentUrlWithoutParam.apply('myparam')})">
<a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>
Następna konfiguracja wiosna:
@Bean
public Function<String, String> currentUrlWithoutParam() {
return param -> ServletUriComponentsBuilder.fromCurrentRequest().replaceQueryParam(param).toUriString();
}
Dalsze rozwiązania „globalny”, chciałbym spróbować rozszerzenie procesor dla atrybutu „th: href” lub tworząc własne atrybut. Nie jestem ekspertem od thymeleaf, po prostu borykającym się z podobnym problemem.
Czy nadal nie ma właściwego sposobu, aby sobie z tym poradzić (od wiosny 2016 r.)? –