我有一个像下面这样的Hibernate代码,它返回单个Entity类:
SQLQuery query =
session.createSQLQuery("select * from Employee");
query.addEntity(Employee.class);
List<Employee> emplist= query.list();
对于上面的代码我的Jstl工作代码是:
<c:choose>
<c:when test="${requestScope.size!=0}">
<table border="1">
<tr>
<th>
EmployeeName
</th>
<th>EmployeeDepartment</th>
</tr>
<c:forEach items="${requestScope.absentlist}" var="emps">
<tr>
<td><c:out value="${emps.empno}"/></td>
<td><c:out value="${emps.empname}"/></td>
</tr>
</c:forEach>
但我的要求是为一个正在返回两个实体的Hibernate写一个jstl代码
这是我的Hibernate代码:
SQLQuery query = session
.createSQLQuery("CALL AbsentReportproc(:_fromdate,:_todate)");
query.addEntity(Master.class);
query.addEntity(DateRange.class);
query.setParameter("_fromdate", "2012-12-03");
query.setParameter("_todate", "2012-12-04");
List<RecordSet> obj = query.list();
Iterator it=obj.iterator();
while(it.hasNext())
{
Object[] obj1 = (Object[]) it.next();
for (int i = 0; i < obj1.length; i++) {
RecordSet set=(RecordSet)obj1[i];
if(set instanceof Master){
System.out.println("Employee Code"+((Master) set).getEmpcode());
System.out.println("Employee Dept"+((Master) set).getDept());
System.out.println("Employee Name"+((Master) set).getEmpname());
}
if(set instanceof DateRange){
System.out.println("AbsentDate"+((DateRange) set).getDdate());
}
}
}
任何人都可以向我提供JSTL代码以在jsp页面上显示上述结果吗?
答案 0 :(得分:2)
所以你实际上有一个List<Object[]>
,列表中的每个Object[]
都包含一个Master作为其第一个元素的实例,以及一个DateRange实例作为它的第二个元素。
首先编写一个包含这两个对象的类,这将使您的代码更易于阅读:
public class MasterAndDateRange {
private Master master;
private DateRange dateRange;
// constructor and getters omitted for brevity
}
然后遍历您的List<Object[]>
并创建List<MasterAndDateRange>
。
然后将此列表存储在请求属性中(例如"listOfMasterAndDateRange"
)。
然后,在JSP中,使用JSTL迭代此列表:
<c:forEach var="masterAndDateRange" items="listOfMasterAndDateRange">
...
<c:out value="${masterAndDateRange.master.foo}"/>
...
<c:out value="${masterAndDateRange.dateRange.bar}"/>
...
</c:forEach>
答案 1 :(得分:0)
根据您的代码,您正在调用存储过程,而不仅仅是单个表查询。因此,hibernate将仅返回Object列表。
您需要迭代循环并填充所需的对象。
其他选项如@JB Nizet所建议。