jstl显示嵌套对象数据
我正在使用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>
任何帮助在所有将不胜感激
感谢
的快速和肮脏的将是lazy属性设置为false。 请注意,这可能会导致性能问题。 解决此问题的常见做法是使用“在视图筛选器中打开会话”。 本博客文章可以帮助 http://sourabhissourabh.blogspot.com/2008/03/what-is-opensessioninviewfilter-and-how.html
这种方法的缺点是,设定以carsearchlist,用户或车将持久化到数据库。所以你必须小心这一点。
CarSearchList
实例的字段类型为User
,另一个字段的类型为Car
。而你的代码正在试图迭代forEach
,在CarSearchList.user
上。但user
不是一个集合或一个数组。这是一个简单的对象。没有什么可迭代的。
此外,用户类不具有任何name
属性。它具有“第一”属性和最后一个属性,但这些属性直接在用户中,而不是在子对象中。
所以,你只需要
<c:forEach var="csl" items="${carsearchlist}">
${csl.id}
${csl.user.first}
</c:forEach>
感谢您的帮助JB和Haim。非常感谢 – robasc 2013-02-13 04:49:02
打开页面时浏览器出现错误吗? – 2013-02-12 05:25:32
我会怀疑延迟加载问题。查看LazyInitializationException的日志。 – 2013-02-12 06:42:51
你是对的钱。我关闭了懒加载,它像冠军一样工作。那么为了使用延迟加载,我需要做些什么?我不得不说,在某些情况下,这可能会派上用场。我还要感谢JB指出我的语法错了。我开始按照JB的方式使用它,但是陷入懒惰的加载问题让我失望。我猜想着急,没有阅读堆栈跟踪对我来说真的很愚蠢。 – robasc 2013-02-12 14:35:24