我正在使用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
的字段。您的代码正在尝试使用forEach
在CarSearchList.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的值设置为持久化到数据库中。所以你必须小心。