Попытка отобразить данные, полученные из базы данных, на странице jsp (я использую Struts 2 с Hibernate)

Я пытаюсь отобразить данные из моей базы данных на странице Jsp, используя Hibernate со Struts 2. Хотя ошибки нет, ничего не отображается.

Я пытался найти решение из других сообщений, но не смог.

Это класс действия.

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>

Я не понимаю, что я делаю неправильно.


person kanishk    schedule 30.07.2011    source источник


Ответы (2)


Убедитесь, что в вашем классе DayReportPersistence есть правильные геттеры и сеттеры для искомых полей (например, Customer_Code, Contact_code и т. д.).

Кроме того, я заметил, что они написаны с заглавной буквы символом подчеркивания, что обычно не относится к переменным Java.

<s:property value="Customer_Code"/> должно быть <s:property value="customerCode"/>

и геттер в классе DayReportPersistence будет getCustomerCode().

Изменить. Использование заглавных букв имеет значение. Если ваш геттер getContact_Code(), вы должны обращаться к нему как <s:property value="contact_Code"/>. Обратите внимание на строчную букву "c" в contact_Code.

person nmc    schedule 30.07.2011

Помимо соглашений об именах, я, вероятно, предложил бы настроить ваши списки до запуска метода execute с использованием Preparable реализации вашего класса действий. Если одно поле названо неправильно, оно будет пустым, вы все равно должны получить что-то в 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();
    }
    ...
}

Этот метод будет срабатывать перед методом execute, поэтому проблема может заключаться в заполнении списка при выполнении. Затем вы можете удалить this.dayReportsList=dayReportQuery.list(); от выполнить.

person Russell Shingleton    schedule 04.08.2011