我使用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并使其正常工作。