сервлет и JSP отправка результата запроса в соответствии с MVC Framework - PullRequest
1 голос
/ 01 июня 2010

Для того, чтобы отделить код Java и HTML-код и быть более верным MVC-фреймворку, я так кодирую;

в сервлете я положил следующее:

net.sf.hibernate.Session s = null;
    net.sf.hibernate.Transaction tx;
    try {

        s= HibernateUtil.currentSession();
        tx=s.beginTransaction();
        Query query = s.createQuery("select  opcemployees.Nom,opcemployees.Prenom,dailytimesheet.TrackingDate,dailytimesheet.Activity," +
                "dailytimesheet.ProjectCode,dailytimesheet.WAName,dailytimesheet.TaskCode," +
                "dailytimesheet.TimeSpent,dailytimesheet.PercentTaskComplete from  Opcemployees opcemployees,Dailytimesheet dailytimesheet  " +
                "where opcemployees.Matricule=dailytimesheet.Matricule  and dailytimesheet.Etat=3 " +
                "group by opcemployees.Nom,opcemployees.Prenom" );  


             for(Iterator it=query.iterate();it.hasNext();)
             {                                                                           
                               if(it.hasNext()){

                                   Object[] row = (Object[]) it.next();
                                   request.setAttribute("items", row);
                               }}
                               } catch (HibernateException e){ 


                            e.printStackTrace();
                            }

request.getRequestDispatcher ("EspaceValidation.jsp"). Forward (запрос, ответ);

и в JSP я начинаю так:

<table>
<c:forEach items="${items}" var="item">
    <tr>
        <td>? </td>
        <td>?</td>
    </tr>
</c:forEach>

в этом случае, что я должен поставить точно, чтобы получить мой результат. Таблица заполнена правильным значением из запроса

1 Ответ

1 голос
/ 01 июня 2010

Поскольку вы используете Hibernate, но не пользуетесь всеми его возможностями, я предлагаю сначала ознакомиться с базовым руководством по Hibernate. Учебное пособие, описанное в Hibernate Reference , хорошо для начала.

Несмотря на это, вам нужно создать модельный объект, который представляет одну сущность таблицы Opcemployees (я бы лучше переименовал ее в Opcemployee, но это уже другая история), а также другую, которая представляет одну сущность Dailytimesheet таблица.

public class Opcemployee {
    private String nom;
    private String prenom;
    private Dailytimesheet dailytimesheet;

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    // Add/generate remnant of constructors, getters and setters.
}

public class Dailytimesheet {
    private Date trackingDate;
    private String activity; // Not sure if this is supposed to be String.
    private String projectCode;
    // ...

    // Add/generate constructors, getters and setters.
}

Эти объекты должны иметь private свойства и public геттеры и сеттеры. Большинство IDE, таких как Netbeans, Eclipse и IntelliJ, могут автоматически сгенерировать их для вас. Существует даже плагин HibernateTools , который может делать все это почти автоматически с помощью нескольких щелчков мыши в зависимости от существующей модели базы данных.

Если все правильно сделано и настроено, вам следует запросить данные в сервлете следующим образом:

List<Opcemployee> opcemployees = session.createQuery("from Opcemployees").list();

Теперь у вас есть List объектов модели, которые можно использовать в JSP. Вам нужно позволить сервлету сохранить этот список в области запроса и перенаправить запрос в JSP.

request.setAttribute("opcemployees", opcemployees);
request.getRequestDispatcher("page.jsp").forward(request, response);

Таким образом, он доступен для ${opcemployees} в page.jsp.

<p>All employees: ${opcemployees}</p>

Но это неправильно отформатировано. Это результат List#toString(). Как будто вы делаете System.out.println(opcemployees) в сервлете. Вам нужно перебрать его, используя тег JSTL c:forEach (просто установите jstl-1.2.jar в /WEB-INF/lib для его установки):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:forEach items="${opcemployees}" var="opcemployee">
    <p>${opcemployee}</p>
</c:forEach>

Это делает то же самое, что и в обычном коде Java:

for (Opcemployee opcemployee : opcemployees) {
    System.out.println(opcemployee);
}

Это становится немного лучше. Каждый предмет печатается отдельно. Но мы хотим, чтобы каждое свойство элемента находилось в отдельной ячейке таблицы. Поэтому нам нужно написать таблицу HTML вокруг нее и напечатать новый <tr> на каждой итерации и получить доступ ко всем свойствам отдельно внутри <td>.

<table>
    <c:forEach items="${opcemployees}" var="opcemployee">
        <tr>
            <td>${opcemployee.nom}</td>
            <td>${opcemployee.prenom}</td>
            <td>${opcemployee.dailytimesheet.trackingDate}</td>
            <td>${opcemployee.dailytimesheet.activity}</td>
            <td>${opcemployee.dailytimesheet.projectCode}</td>
        </tr>
    </c:forEach>
</table>

${opcemployee.nom} в основном делает System.out.println(opcemployee.getNom()). Как видите, вы можете связать методы получения в EL. ${opcemployee.dailytimesheet.projectcode} напечатает результат opcemployee.getDailytimesheet().getProjectCode().

Надеюсь, это поможет. Также смотрите этот учебник по JSP / сервлету . Этот же сайт также поставляется с отличными учебными пособиями по Hibernate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...