jstl显示嵌套对象数据



我正在使用jsp、hibernate和spring。

我的问题是,我有一个名为"carsearchlist"的对象,在carsearchlist中,我有另外两个名为user和car的对象。由于某些原因,这个foreach循环将不起作用。

    <c:forEach var="csl" items="${carsearchlist}">
     ${csl.id}
         <c:forEach var="name" items="${csl.user}">
               ${name.first} 
         </c:forEach>
    </c:forEach>

我的数据显示HQL编辑器如屏幕截图所示:

http://i244.photobucket.com/albums/gg5/robasc/ScreenShot2013-02-12at120841AM_zpsdb5449b4.png

这里还有我的CarSearchList:地图

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2013 8:14:19 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.usedcarsearch.domain.CarSearchList" table="Car_Search_List">
    <id name="id" type="java.lang.Integer">
        <column name="id" />
        <generator class="identity" />
    </id>
    <many-to-one name="car" class="com.usedcarsearch.domain.Car" fetch="select">
        <column name="fkCarId" not-null="true" />
    </many-to-one>
    <many-to-one name="user" class="com.usedcarsearch.domain.User" fetch="select">
        <column name="fkUserId" not-null="true" />
    </many-to-one>
</class>
</hibernate-mapping>

任何帮助都将不胜感激

感谢

CarSearchList实例有一个类型为User的字段,另一个类型是Car的字段。您的代码正在尝试使用forEachCarSearchList.user上进行迭代。但user不是一个集合或数组。这是一个简单的物体。没有什么可重复的。

此外,User类没有任何name属性。它有一个"first"属性和一个last属性,但它们直接在User中,而不是在Name子对象中。

所以你只需要

<c:forEach var="csl" items="${carsearchlist}">
     ${csl.id}
     ${csl.user.first} 
</c:forEach>

快速而肮脏的方法是将lazy属性设置为false。请注意,这可能会导致性能问题。解决此问题的常见做法是使用"打开视图中的会话筛选器"。这篇博客文章可以帮助http://sourabhissourabh.blogspot.com/2008/03/what-is-opensessioninviewfilter-and-how.html

这种方法的缺点是将carsearchlist、user或car的值设置为持久化到数据库中。所以你必须小心。

最新更新