La soluzione più semplice è concatenare "requestURI" e "queryString". Ecco esempio:
<div th:with="currentUrl=(${#httpServletRequest.requestURI + '?' + #strings.defaultString(#httpServletRequest.queryString, '')})">
<a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>
Risultato per "http://localhost:8080/some-page?param1=1 ":
http://localhost:8080/some-page?param1=1&myparam=test
Risultato per" http://localhost:8080/some-page":
http://localhost:8080/some-page?&myparam=test
neo:
Thymeleaf non sovrascrive i parametri - aggiunge solo parametri all'URL. Quindi, se l'utente clicca ancora una volta a questo URL, il risultato sarà:
http://localhost:8080/some-page?param1=1&myparam=test&myparam=test
Riferimenti:
http://forum.thymeleaf.org/How-to-link-to-current-page-and-exchange-parameter-td4024870.html
EDIT:
Ecco alcuni workaround, che rimuove il parametro "myparam" dall'URL:
<div th:with="currentUrl=(${@currentUrlWithoutParam.apply('myparam')})">
<a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>
Avanti nella configurazione di Spring:
@Bean
public Function<String, String> currentUrlWithoutParam() {
return param -> ServletUriComponentsBuilder.fromCurrentRequest().replaceQueryParam(param).toUriString();
}
Per ulteriori soluzioni "globali", proverei ad estendere il processore per l'attributo "th: href" o creare il mio attributo. Non sono un esperto di Thymeleaf, sto solo affrontando un problema simile.
Non esiste ancora un modo corretto di gestirlo (a partire dalla primavera 2016)? –