如何在JSP中通过requestScope获取嵌套对象的值并展示
实现JSP通过requestScope访问BookUser子对象属性的正确方式
首先看你的代码结构是没问题的,只要确保几个关键点到位,就能顺利打印子对象的属性,具体步骤如下:
1. 后端确保数据正确存入Request域
首先要保证后端业务逻辑中,已经把包含BookUser对象的集合正确放入request范围,而且属性名称必须和JSP中使用的LISTALLBOOKORIGINAL完全一致(大小写敏感),比如后端代码示例:
// 假设你已经组装好BookUser列表 List<BookUser> bookUserList = ...; // 将列表存入request域,属性名要和JSP里的完全匹配 request.setAttribute("LISTALLBOOKORIGINAL", bookUserList);
2. JSP页面的正确取值方式
你当前的JSP代码写法是正确的,EL表达式会自动调用对象的getter方法来获取子对象属性:
${dtoX.book.id}等价于调用dtoX.getBook().getId()- 只要你的
Books类中存在对应的getter方法(getId()、getBookTitle()、getPrice()等),就能正常取值
整理后的JSP代码(补充注释说明):
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 从requestScope中获取BookUser列表 --> <c:set var="listBookNew" value="${requestScope.LISTALLBOOKORIGINAL}"/> <c:if test="${not empty listBookNew}"> <table border="1"> <thead> <tr> <th>Id</th> <th>Title</th> <th>Price</th> <th>Quantity</th> <th>Date</th> </tr> </thead> <tbody> <!-- 遍历BookUser列表 --> <c:forEach var="dtoX" items="${listBookNew}"> <tr> <!-- 通过EL表达式访问子对象Books的属性 --> <td>${dtoX.book.id}</td> <td>${dtoX.book.bookTitle}</td> <td>${dtoX.book.price}</td> <td>${dtoX.book.quantity}</td> <td>${dtoX.book.bookDate}</td> </tr> </c:forEach> </tbody> </table> </c:if>
3. 关键注意点
- 属性名称大小写敏感:你之前提到拼写错误requestScope的属性名称,这是常见坑,一定要保证后端
setAttribute的名称和JSP中requestScope.XXX的名称完全一致 - 子对象必须存在getter方法:你的
BookUser类已经正确实现了getBook()和getUser(),同时要确保Books类中对应属性的getter方法都存在,否则EL表达式无法取值 - 避免空指针问题:如果
BookUser中的book属性可能为null,建议在JSP中增加非空判断,比如:${not empty dtoX.book ? dtoX.book.id : 'N/A'}
你的BookUser类代码结构是正确的,只要满足上述条件,就能正常在JSP页面打印出子对象的属性啦!
内容的提问来源于stack exchange,提问作者user11131551
相关产品推荐
相关产品推荐

