Thymeleaf th: объект не работает с контроллером? - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в Thymeleaf. Я пытаюсь создать форму поиска, но она не работает. Но когда я попытался вручную ввести localhost: 8080 / searchMovies / name , и он работает нормально, что не так с моим кодом?

MovieController. java

@GetMapping("/searchMovies/{name}")
    public ModelAndView searchMoviesByNameLike(@PathVariable("name") String name) {
        List<Movie> searchMovies = movieService.findMovieByNameContaining(name);
        ModelAndView modelAndView = new ModelAndView("searchMovies");
        modelAndView.addObject("searchMovies", searchMovies);
        modelAndView.addObject("searchMoviesList", movieService.findMovieByNameContaining(name));
        return modelAndView;
}

header. html

<form th:object="${searchMovies}"  th:action="@{/searchMovies}" method="get"  class="form-inline my-2 my-lg-0">
   <input class="form-control mr-sm-2" type="text" placeholder="" aria-label="Search" th:value="${name}">
   <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

вам нужно имя в конце URL, но вы его не указали. в этом случае вы не можете установить его. Вы должны сделать это другим подходом. Другое дело, что вам нужен объект в вашей форме, а не список. попробуйте следующий код:

@GetMapping("/searchMovies")
public String sendSearchForm(Model model) {
    model.addAttribute("movie", new Movie());
    return "search";
}

<form th:object="${movie}"  th:action="@{/searchMovies}" method="post"     class="form-inline my-2 my-lg-0">
 <input class="form-control mr-sm-2" type="text" placeholder="" aria-label="Search" th:field="*{name}">
 <button class="btn btn-outline-success my-2 my-sm-0"  type="submit">Search</button>
</form>


@PostMapping("/searchMovie")
public String searchAccounts(@ModelAttribute Movie movie) {
    List<Movie> searchMovies =  movieService.findMovieByNameContaining(movie.getName());
.
.
.
    return modelAndView;
0 голосов
/ 31 марта 2020
  1. th:object (обычно) не используется для получения запросов. Вы используете th:object при отправке (w / POST) формы и хотите, чтобы Spring заполнял свойства объекта Java полями этой формы.
  2. Поскольку Thymeleaf является серверный обработанный язык, и обычный html не поддерживает построение / переадресацию на тот URL-адрес, который вы хотите, вам придется использовать JavaScript для достижения sh того, что вы хотите.

Например, обычный запрос GET при отправке через форму выглядит следующим образом:

/searchMovies?property1=value1&property2=value2

, если вы хотите, чтобы ваш URL-адрес выглядел следующим образом:

/searchMovies/value1

, затем вам нужно использовать JavaScript для создания этого URL, когда пользователь нажимает кнопку и переходит к этому URL.

...