HTML отчет в JSP - PullRequest
       19

HTML отчет в JSP

1 голос
/ 07 февраля 2010

Мой клиент дал мне HTML-шаблон для выставления счетов, и я должен включить его в свой текущий проект JSP / Servlet. Это необработанный HTML-файл, и результат должен быть точно таким же, с разрывами страниц и так далее. Он имеет одну таблицу заголовков и одну таблицу данных, как наш обычный счет. Есть идеи, как отобразить детали в отчете из Servlet / JSP?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2010

Просто поместите его в файл JSP и замените все, что должно быть динамически сгенерировано с помощью taglibs и EL. Вы можете использовать JSP в качестве шаблона для отображения HTML (и CSS / JS) обычным способом. Вы можете использовать EL для доступа к «внутренним» данным (все, что помещено как атрибут в область действия page, request, session или application), и вы можете использовать taglibs для управления потоком страниц динамически.

Как сказал Божо, вы можете использовать JSTL (просто перетащите jstl-1.2.jar в /WEB-INF/lib веб-приложения) c:forEach для перебора коллекция Javabeans. Вы можете использовать EL для доступа к свойствам Javabean. Вы можете создать Javabean, который представляет Order (а также Customer и Item):

public class Order {
    private Long id;
    private Date timestamp;
    private Customer customer;
    private List<Item> items;
    // Add/generate public getters and setters.
}

Вы можете использовать Servlet, чтобы получить Order из базы данных и перенаправить запрос в файл JSP для отображения. Э.Г.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Long orderId = Long.valueOf(request.getParameter("orderId"));
    Order order = orderDAO.find(orderId);
    request.setAttribute("order", order);
    request.getRequestDispatcher("/WEB-INF/report.jsp").forward(request, response);
}

Отобразите это Servlet в web.xml с помощью url-pattern, чтобы вы могли вызывать его с помощью формы POST или, возможно, просто с помощью ссылки GET (затем замените doPost() на doGet()). Вы видите, что Servlet помещает найденный order в область запроса (чтобы он был доступен в EL с помощью ${order}) и перенаправляет запрос в JSP для отображения. Вы также видите, что JSP помещен в /WEB-INF для предотвращения прямого доступа к странице (например, путем ввода URL-адреса JSP в адресной строке браузера).

В отчете вы можете получить доступ к Order следующим образом:

<h1>Order header</h1>
<table>
    <tr><th>Order ID:</th><td>${order.id}</td></tr>
    <tr><th>Order timestamp:</th><td><fmt:formatDate value="${order.timestamp}" dateStyle="long" /></td></tr>
    <tr><th>Customer name:</th><td>${order.customer.name}</td></tr>
    <tr><th>Customer address:</th><td>${order.customer.address}</td></tr>
</table>

<h2>Order details</h2>
<table>
    <tr>
        <th>Name</th>
        <th>Description</th>
        <th>Quantity</th>
        <th>Price</th>
    </tr>
    <c:forEach items="${order.items}" var="item">
        <tr>
            <td>${item.name}</td>
            <td>${item.description}</td>
            <td>${item.quantity}</td>
            <td><fmt:formatNumber value="${item.price}" type="currency" currencySymbol="&euro;" /></td>
        </tr>
    </c:forEach>
</table>

Обратите внимание, что выше, это только основной пример. Вам, конечно, нужно использовать ваш HTML-шаблон.

1 голос
/ 07 февраля 2010

Скопируйте и вставьте большую часть. Затем отредактируйте его так, чтобы каждая строка (<tr>) таблицы должна содержать одну строку из ваших данных, поэтому используйте:

<table>
    <c:forEach items="#{yourData} var="#{row}">
       <tr>
         <td>#{row.datum1}</td>
         <td>#{row.datum2}</td>
       </tr>
    </c:forEach>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...