Spring Thymeleaf перенаправляет пользователей в /users/{thisUser} /thisUsersCollectionOfThings

#java #spring #spring-boot #spring-mvc #thymeleaf

#java #spring #весенняя загрузка #spring-mvc #thymeleaf

Вопрос:

Я пытаюсь отправить пользователя на определенную страницу, содержащую список их элементов. До сих пор у меня ничего не получалось.

Сначала я показываю страницу со списком всех пользователей, с гиперссылками, переходящими на то, что, по моему мнению, должно быть их соответствующей страницей.

В моем шаблоне у меня есть это:

     <li th:each="key: ${users.keySet()}">
        <span th:text="${users.get(key).getName()}"></span>
        <a href="games.html" th:href="@{/{user}/games (user=${users.get(key).getName()}) }">View games</a></li>
    </li>
  

который в настоящее время перенаправляет, например, на URL http://localhost:8080/Steve/games .

Трудность, с которой я сталкиваюсь, заключается в том, что я знаю, как связать все остальное вместе.

У меня есть контроллер с этим сопоставлением, который, я считаю, должен вызываться, когда этот URL

     @RequestMapping("/{users}/games")
    @ResponseBody
    public String userGames(@PathVariable final String username,
                            Model model){
        .. List<Games> games= getGames(username)..
        model.addAttribute("games", games);
        return "games";
    }
  

итак, что я хотел бы сделать там, так это отобразить HTML-страницу шаблона «игры», но со списком игр, которые я извлек для этого пользователя. Однако я получаю стандартную This application has no explicit mapping for /error, so you are seeing this as a fallback. ошибку и не могу понять, где я ошибся.

Мой шаблон ‘Games’ следует тому же шаблону, что и предыдущий, путем перебора списка:

  <ol>
    <li th:each="game : ${games}" th:text="${game.getName()}"></li>
</ol>
  

но не отображается.

В моем игровом классе есть метод для поиска имени. В трассировке стека нет исключений

Любая помощь была бы высоко оценена, спасибо.

Комментарии:

1. Есть ли у вас метод getName() в вашем игровом классе? Отображается ли что-нибудь (stacktrace) в консоли java?

2. Вы могли бы проверить с помощью $ {game.name } вместо этого.

3. @mate00 — Привет, да, метод существует, нет трассировки стека использования tbh. Никаких исключений и т.д. Я попробую game.name и посмотрим, поможет ли это!

4. @mate00 — game.name выдал тот же результат.

5. Возможно ли, чтобы вы поделились своим проектом? Я мог бы попробовать запустить это сам и посмотреть, смогу ли я помочь.

Ответ №1:

Хорошо, подводя итог нашему разговору в чате: в вашем классе контроллера отсутствовала @Controller аннотация, поэтому ваш метод сопоставления вообще не вызывался. Затем вы убедитесь, что строка в параметре метода контроллера имеет то же имя, что и то, через что передается.