繁体   English   中英

jsp中的html报告

[英]html report in jsp

我的客户给了我一个用于计费的HTML模板,我必须在我正在进行的JSP / Servlet项目中加入。 它是一个原始HTML文件,输出应与分页符完全相同,依此类推。 它有一个标题表和一个详细信息表,就像我们的普通发票一样。 知道如何在Servlet / JSP中显示报告中的细节吗?

只需将其放在JSP文件中,并替换需要由taglibs和EL动态生成的所有内容。 您可以使用JSP作为模板以通常的方式显示HTML(和CSS / JS)。 您可以使用EL访问“后端”数据(在pagerequestsessionapplication范围中作为属性放置的所有内容),您可以使用taglibs动态控制页面流。

正如Bozho所说,你可以使用JSTL (只需在webapp的/WEB-INF/lib删除jstl-1.2.jarc:forEach迭代一组Javabeans。 您可以使用EL访问Javabean属性。 您可以创建表示Order (以及CustomerItem )的Javabean:

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);
}

通过url-pattern将此Servlet映射到web.xml ,以便您可以通过POST表单调用它,也可以只通过GET链接调用它doGet()然后用doGet()替换doPost() )。 您会看到Servlet将找到的order放在请求范围内(以便可以通过${order}在EL中访问它)并将请求转发给JSP进行显示。 您还看到JSP被放置在/WEB-INF以防止页面被直接访问(例如,通过在浏览器地址栏中输入JSP的URL)。

在报告中,您可以像这样访问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模板。

复制粘贴大部分内容。 然后编辑它,以便表的每一行( <tr> )必须包含数据中的一行,因此使用:

<table>
    <c:forEach items="#{yourData} var="#{row}">
       <tr>
         <td>#{row.datum1}</td>
         <td>#{row.datum2}</td>
       </tr>
    </c:forEach>
</table>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM