1

我正在使用 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>

任何帮助将不胜感激

谢谢

4

2 回答 2

3

CarSearchList实例有一个 typeUser字段和另一个 type 字段Car。并且您的代码正在尝试使用forEach, on进行迭代CarSearchList.user。但user不是集合或数组。这是一个简单的对象。没有什么可以迭代的。

此外, User 类似乎没有任何name属性。它有一个“第一个”属性和一个最后一个属性,但它们直接在用户中,而不是在Name子对象中。

所以你只需要

<c:forEach var="csl" items="${carsearchlist}">
     ${csl.id}
     ${csl.user.first} 
</c:forEach>
于 2013-02-12T08:10:28.267 回答
1

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

这种方法的缺点是汽车搜索列表、用户或汽车的设置值将被持久化到数据库中。所以你必须小心。

于 2013-02-13T07:23:48.770 回答