Thymeleaf th:href 参数中的条件

Bat*_*lug 5 java spring thymeleaf

所以我的 Thymeleaf 模板中有一个元素,它有一个看起来像这样的链接:

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

根据当前的实现,parameter1...10可以具有我不想包含在href. 例如,如果是id,可以是-1,表示没有选择id,所以这个参数必须省略,以免乱码url字符串,所以代替

/search/type?parameter1=-1

弄干净

/search/type

如何实现?我试过这个:

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

但是这个表达式会导致异常:

org.thymeleaf.exceptions.TemplateProcessingException:无法解析为表达式:

我试过这个:

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

但是结果还是不能接受:

/search/type?parameter1=

那么从url中消除不需要的参数的正确方法是什么?

Bat*_*lug 5

看来我做了更多研究并找到了方法。关键词是:预处理。 这是链接。 因此,出于我的目的,以下表达式有效:

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

简短说明:用双下划线包围表达式__(${parameter1}=='-1'?','parameter1=${parameter1})__,然后仅当其计算结果为非空字符串时才会添加包围的表达式。对于 url 参数,','计算结果为两个空参数并且不添加。