struts-tags迭代器正在复制行

时间:2016-10-04 18:47:44

标签: java hibernate

我使用struts-tags迭代器将数据输出到html表。它适用于大多数情况,但对于几行,它复制前一行而不是放入正确的数据。非常奇怪的不一致。

这是html:

<s:iterator value="result">
<tr>
<td><s:property value="timestamp"/></td>
<td><s:property value="targetId"/></td>
<td><s:property value="sourceIp"/></td>
<td><s:property value="transactionType"/></td>
<td><s:property value="status"/></td>
</tr>
</s:iterator>

&#34;导致&#34;在java控制器中定义:

private List<AuditData> result

并由hibernate查询填充,如下所示:

    session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = buildQuery2(session);
    result = criteria.list();

以下是问题的示例输出:

10/3/16 8:17:31 PM.000  hanogreg    10.10.10.10     Pwd Reset   Success
10/3/16 8:17:31 PM.000  hanogreg    10.10.10.10     Pwd Reset   Success

第二行是第一行的副本,但数据库显示第二行应该说&#34; Pwd Change&#34 ;, not&#34; Pwd Reset&#34;。

有没有人对可能导致这种不一致行为的原因有任何想法?

编辑:这是一个休眠问题,而不是struts问题,因为我可以看到&#34;结果&#34;已包含重复行而不是实际行。这是buildQuery2(),它创建了hibernate标准:

private Criteria buildQuery2(Session session) throws ParseException {
    Criteria criteria = session.createCriteria(AuditData.class);
    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");

    if (!fromDate.equals("All")) {
        Date fDate = df.parse(fromDate);
        criteria.add(Restrictions.ge("timestamp", fDate));
    }
    if (!toDate.equals("All")) {
        Date tDate = df.parse(toDate);
        actionlogger.debug("toDate=" +toDate +", tDate="+tDate.toString());
        tDate = getEndOfDayDate(tDate); //set the time to the last millisecond of the day so all other times will be less
        criteria.add(Restrictions.le("timestamp", tDate));
    }
    if (!csgUsername.equals("All"))     criteria.add(Restrictions.eq("target_id",csgUsername));
    if (!sourceIp.equals("All"))        criteria.add(Restrictions.eq("source_ip",sourceIp));
    if (!transactionType.equals("All")) criteria.add(Restrictions.eq("transaction_type",transactionType));
    if (!status.equals("All"))          criteria.add(Restrictions.eq("status",status));
    criteria.addOrder(Order.asc("timestamp"));

    return criteria;
}   

由于我无法弄清楚为什么会发生这种情况,我不得不重新编写代码来执行相同的操作而不使用hibernate并使其正常工作。

0 个答案:

没有答案