0
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>

Springboot

How to construct expression for th:action "action url" in form? Url depends on "name" variable.

I'm trying like this, but it's not working:

<form method="get"
    th:action="@{'/' + {baseUrl}(baseUrl=${#strings.isEmpty(name) ? '' : 'user/find/'})}">

    <input type="text" th:value="${name}"/>
    <button type="submit">Find</button>
    <button type="button"
            th:classappend="${#strings.isEmpty(name)}?'hidden':''"
            onclick="clearSearch()">X</button>
</form>

and I tried this, doesn't work too:

<form th:with="baseUrl=(${#strings.isEmpty(name) ? '/' : '/user/find/'})"
      th:action="@{${baseUrl}}" method="get">
ilja
  • 351
  • 2
  • 14
Victor IT
  • 21
  • 6

2 Answers2

2

Oh sorry. I realized Thymeleaf is not for dynamically handling input field.

I just write a JS code.

$(document).ready(function () {
    var searchForm = $(this).find('#searchForm');
    searchForm.on('click', '#searchButton', function (event) {
      var form = $('#searchForm');
      var name = $('#searchInputName').val();
      var addUrl = (name === '') ? '/' : '/user/find/';
      form.attr('action', addUrl);
    });
});

after that I realized I can realize it simpler in my controller :)

@GetMapping("/user/find/")
public String getNextPage(Model model, Pageable pageable,
@RequestParam(name = "name") String name) {

    if (name.isEmpty()) return "redirect:/";
....
}
Victor IT
  • 21
  • 6
0

You can write dynamic url like below

th:action="@{${#strings.isEmpty(name) ? '/' : '/user/find'}}"

If you want you can add dynamic value to your urls like below

th:action="@{${#strings.isEmpty(name) ? '/' : '/user/find' + name}}"