Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditions in Thymeleaf th:href parameter

So I have an element in my Thymeleaf template which has a link looking like that:

th:href="@{'/search/'+${searchType}(parameter1=${parameter1}, ... parameter10=${parameter10})}"

According to the current implementation the parameter1...10 can have values that I don't want to include in the href. For example, if it's id, it can be -1, which means that no id chosen, so this parameter have to be omitted to avoid clattering the url string, so instead of

/search/type?parameter1=-1

get just clean

/search/type

How this can be achieved? I tried this:

th:href="@{'/search/'+${searchType}((${parameter1}=='-1'?''parameter1=${parameter1}))}"

But this expression causes exception:

org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression:

I tried this:

th:href="@{'/search/'+${searchType}(parameter1=(${parameter1}=='-1'?'':${parameter1}))}"

But then the result is still not acceptable:

/search/type?parameter1=

So what is the correct way to eliminate undesirable parameters from the url?

like image 431
Battle_Slug Avatar asked Apr 02 '17 23:04

Battle_Slug


People also ask

How do you pass parameters in Thymeleaf?

Request parameters can be easily accessed in Thymeleaf views. Request parameters are passed from the client to server like: https://example.com/query?q=Thymeleaf+Is+Great! In the above example if parameter q is not present, empty string will be displayed in the above paragraph otherwise the value of q will be shown.

What is #{} in Thymeleaf?

#{} is used for message (i18n) expressions. Used to retrieve locale-specific messages from external sources.


1 Answers

Looks like I did more research and found a way. The key word is: preprocessing. This is the link. So for my purposes the following expression works:

th:href="@{'/search/'+${searchType}(__(${parameter1}=='-1'?','parameter1=${parameter1})__,__(${parameter2}=='-1'?','parameter2=${parameter2})__)}"

Short explanation: surround the expression with double underscores __(${parameter1}=='-1'?','parameter1=${parameter1})__, and then the surrounded expression will only be added if it evaluates to non-empty string. In the case of url parameters ',' evaluates to two empty parameters and not added.

like image 99
Battle_Slug Avatar answered Oct 06 '22 00:10

Battle_Slug