0

我有一个如下所示的休眠代码,它返回单个实体类:

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>

但我的要求是为返回两个实体的休眠编写一个 jstl 代码

这是我的休眠代码:

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 页面上显示上述结果吗?

4

2 回答 2

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>
于 2013-02-04T10:33:34.783 回答
0

根据您的代码,您正在调用存储过程,而不仅仅是单表查询。因此休眠将只返回对象列表。

您需要迭代循环并填充所需的对象。

@JB Nizet 建议的其他选项。

于 2013-02-04T12:17:35.663 回答