如何从JSP标签获取Bean值?遍历Order对象属性报错解决方案
解决JSP中<c:forEach>遍历Order列表时属性访问错误的问题
嘿,问题根源一眼就能看出来——你在<c:forEach>里把循环变量的名字和整个集合的名字搞重了!你写的var="orders"和存在request里的集合名完全一样,JSP根本分不清你要访问的是单个Order对象还是整个列表,不出错才怪呢😅
正确的写法应该是这样:
把var改成单数的order(语义上也更合理,毕竟每次循环取的是单个订单),然后在循环体内用order.属性名来访问单个对象的属性:
<c:forEach items="${orders}" var="order"> <!-- 示例:访问height属性 --> <div>订单高度:${order.height}</div> <!-- 其他属性同理,比如订单ID、名称等 --> <div>订单ID:${order.id}</div> </c:forEach>
为什么这样能解决问题?
items="${orders}"指向的是你Servlet中存入request的ArrayList<OrderSample>集合,这部分你写的逻辑完全没问题var="order"表示每次循环时,集合里的单个OrderSample实例会被赋值给order变量,此时用order.height就会正确调用该对象的getHeight()方法(EL表达式的点运算符是依赖getter方法的哦)
额外要注意的点:
别忘记你的OrderSample类必须有对应属性的getter方法!比如要访问height,就得有public Integer getHeight()(返回类型根据你的属性定义调整),否则EL表达式还是取不到值。
附一下你写的正确的Servlet代码(这部分逻辑没问题,不用修改):
@Override String execute(HttpServletRequest request, HttpServletResponse response) throws LoginSampleException { try{ ArrayList<OrderSample> orders =UserMapper.showOrders(); request.setAttribute("orders", orders); } catch (ClassNotFoundException ex) { Logger.getLogger(Employee.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(Employee.class.getName()).log(Level.SEVERE, null, ex); } return "employeepage"; }
内容的提问来源于stack exchange,提问作者jendellkenner
相关产品推荐
相关产品推荐

