我正在尝试使用带有struts 2的Hibernate将数据从我的数据库显示到Jsp页面。 虽然没有错误但没有显示任何内容。
我试图从其他帖子中找到解决方案但不能。
这是动作类。
public class viewDayReportAction extends ActionSupport {
private static final long serialVersionUID = 9149826260758390091L;
//DayReportPersistence is the class which maps the table in hibernate
private List<DayReportPersistence> dayReportsList;
public List<DayReportPersistence> getDayReportsList() {
return dayReportsList;
}
public void setDayReportsList(List<DayReportPersistence> dayReportsList) {
this.dayReportsList = dayReportsList;
}
private DayReportPersistence dayReport;
public DayReportPersistence getDayReport() {
return dayReport;
}
public void setDayReport(DayReportPersistence dayReport) {
this.dayReport = dayReport;
}
private DayReportQuery dayReportQuery;
public viewDayReportAction() {
dayReportQuery=new DayReportQuery();
}
@Override
public String execute(){
this.dayReportsList=dayReportQuery.list();
System.out.println(dayReportsList);
//this statement prints the following in the tomcat output screen
//[Hibernate.DayReportPersistence@1974acd, Hibernate.DayReportPersistence@1afe8ef,
//Hibernate.DayReportPersistence@1974acd, Hibernate.DayReportPersistence@1afe8ef]
//there are four objects because 4 records were fetched from the table
return "success";
}
}
这是dayReportQuery.java,它执行查询并返回结果
public class DayReportQuery {
public List<DayReportPersistence> list(){
Session session = HibernateConnection.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<DayReportPersistence> dayReportsList = null;
try {
dayReportsList = (List<DayReportPersistence>) session.createQuery(
"from DayReportPersistence").list();
session.getTransaction().commit();
} catch (HibernateException e) {
System.out.println(e.getMessage());
session.getTransaction().rollback();
}
return dayReportsList;
}
}
这是我应该显示数据的jsp页面
<table>
<s:iterator value="dayReportsList" var="dayReport">
<tr>
<td><s:property value="Customer_Code"/></td>
<td><s:property value="Contact_Code"/></td>
<td><s:property value="Employee_Code"/></td>
<td><s:property value="Enquiry_Code"/></td>
<td><s:property value="Stage"/></td>
<td><s:property value="Type"/></td>
<td><s:property value="Date"/></td>
</tr>
</s:iterator>
</table>
我不明白我做错了什么
请尽快帮助。
答案 0 :(得分:2)
确保您的DayReportPersistence类具有您正在寻找的字段的正确getter和setter(如Customer_Code,Contact_code等)
另外,我注意到这些都是使用下划线大写的,而Java变量通常不是这种情况。
<s:property value="Customer_Code"/>
应为<s:property value="customerCode"/>
并且DayReportPersistence类中的getter应该是getCustomerCode()
。
修改强>
资本化确实很重要。如果您的获取者是getContact_Code()
,那么您应该将其称为<s:property value="contact_Code"/>
。请注意contact_Code
答案 1 :(得分:1)
除了命名约定之外,我可能会建议在使用ryour action类的Preparable实现触发execute方法之前设置列表。如果一个字段名称不正确,它将为空白,如果列表不为空或为空,您仍应在jsp上获取某些内容。
public class viewDayReportAction extends ActionSupport implements Preparable{
private static final long serialVersionUID = 9149826260758390091L;
//DayReportPersistence is the class which maps the table in hibernate
private List<DayReportPersistence> dayReportsList;
public void prepare(){
this.dayReportsList=dayReportQuery.list();
}
...
}
此方法将在执行方法之前触发,在执行中填充列表可能是您的问题。然后,您可以删除this.dayReportsList = dayReportQuery.list();来自执行。