Spring:如何获取model属性并检查JSP中是否为null?

问题描述 投票:1回答:1

我刚开始学习Spring框架。在我的控制器中,我写道

@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属性为null。当我调试时,它显示模型成功添加了founduser。

谁能告诉我为什么会收到错误?非常感谢!

spring spring-boot jsp jstl
1个回答
1
投票

首先,${not empty founduser}将仅访问当前请求属性中的值。

但是,您使用redirect:/profile来显示JSP .Redirect意味着另一个新请求将被发送到服务器。这个新请求不会通过getUserByUsername控制器,因此在这个新的请求属性中没有founduser,JSP无法找到它。

要解决它,您可以根据应用程序架构来解决问题

  1. 不要在控制器中重定向,只需返回profile
  2. 如果您确实需要重定向,请将值添加到flash属性,以便它们在重定向后仍然可以存活并访问: model.addFlashAttribute("founduser",founduser);
© www.soinside.com 2019 - 2024. All rights reserved.