Spring: Как получить атрибут модели и проверить, является ли он пустым в JSP? - PullRequest
0 голосов
/ 23 февраля 2019

Я только недавно начал изучать Spring Framework.В моем контроллере я пишу

@GetMapping("/users/{username}")
public String getUserByUsername(@PathVariable(value = "username") String username, ModelMap model) {
    User founduser = userRepository.findById(username)
            .orElseThrow(() -> new ResourceNotFoundException("User", "username", username));

    model.addAttribute("founduser",founduser);
    return "redirect:/profile";
}

Затем я пытаюсь получить атрибут модели и распечатать его в моем JSP.

 <c:when test="${not empty founduser}">
             <table style="border: 1px solid;">
                <c:forEach var="one" items="${founduser}">
                    <tr>
                        <td>${one.username}</td>

                        <td>${one.createdAt}</td>
                    </tr>
                </c:forEach>
            </table>
        </c:when>

Однако я обнаружил, что test = "${not empty founduser} всегда false, что означает, что мой атрибут founduser равен нулю. Когда я отлаживаю, это показывает, что модель успешно добавляет founduser.

Кто может сказать мне, почему я получил ошибку? Большое спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Во-первых, ${not empty founduser} будет обращаться к значениям только из текущего атрибута запроса.

Однако вы используете redirect:/profile для отображения JSP. Перенаправление означает, что на сервер будет отправлен еще один новый запрос.Этот новый запрос не будет проходить через контроллер getUserByUsername и, следовательно, в этом новом атрибуте запроса нет founduser, и JSP не сможет его найти.

Чтобы решить эту проблему, в зависимости от архитектуры вашего приложения, вы можете

  1. Не перенаправлять на свой контроллер, просто вернуть profile.

  2. Если вам действительно нужно перенаправить, добавьте значения к атрибуту flash, чтобы их можно было сохранить и получить к ним доступ после перенаправления:

    model.addFlashAttribute("founduser",founduser);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...