2013-02-12 78 views
1

我正在使用jsp,hibernate和spring。jstl显示嵌套对象数据

我的问题是,我有一个名为“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> 

任何帮助在所有将不胜感激

感谢

+0

打开页面时浏览器出现错误吗? – 2013-02-12 05:25:32

+1

我会怀疑延迟加载问题。查看LazyInitializationException的日志。 – 2013-02-12 06:42:51

+0

你是对的钱。我关闭了懒加载,它像冠军一样工作。那么为了使用延迟加载,我需要做些什么?我不得不说,在某些情况下,这可能会派上用场。我还要感谢JB指出我的语法错了。我开始按照JB的方式使用它,但是陷入懒惰的加载问题让我失望。我猜想着急,没有阅读堆栈跟踪对我来说真的很愚蠢。 – robasc 2013-02-12 14:35:24

回答

3

CarSearchList实例的字段类型为User,另一个字段的类型为Car。而你的代码正在试图迭代forEach,在CarSearchList.user上。但user不是一个集合或一个数组。这是一个简单的对象。没有什么可迭代的。

此外,用户类不具有任何name属性。它具有“第一”属性和最后一个属性,但这些属性直接在用户中,而不是在子对象中。

所以,你只需要

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

感谢您的帮助JB和Haim。非常感谢 – robasc 2013-02-13 04:49:02