2010-02-07 104 views
1

我的客戶已經給了我一個用於計費的HTML模板,並且我必須將其納入我正在進行的JSP/Servlet項目中。這是一個原始的HTML文件,輸出應該與分頁符相同。它有一個標題表和一個細節表,就像我們的普通發票一樣。任何想法如何顯示來自Servlet/JSP的報告中的細節?jsp中的html報告

+0

是您的問題通過提供的答案解決?提供反饋信息。 – Bozho 2010-02-11 13:03:19

+0

對延遲響應感到抱歉!是的,我管理了一些什麼讓我的html模板運行根據mr.balusc給出的指示。我再次道歉,但我仍然需要學習很多東西,如果遇到任何問題,都會嘗試離線並回到這裏。 – sansknwoledge 2010-02-16 11:03:42

回答

3

只是把它放在一個JSP文件,並替換需要由標籤庫動態生成的一切和EL。您可以使用JSP作爲模板來顯示HTML(和CSS/JS)通常的方式。您可以使用EL來訪問「後端」數據(在page,request,sessionapplication作用域中作爲屬性放置的所有內容),並且可以使用taglib來動態控制頁面流。

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

地圖在web.xmlServleturl-pattern,使您可以通過一個POST形式只是由GET鏈接調用它也許(更換由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模板。

+0

很抱歉,因爲這麼幼稚,EL @Bozho中的btwn $和#有什麼區別,因爲已經爲你的小貓添加了投票權,明天當我完成這個 – sansknwoledge 2010-02-08 14:41:38

+0

時,我將投票贊成Mr.BalusC :-) '#{}'符號是新的/統一的EL,通常只用於JSF/Facelets,而不是普通的vanilla JSP。 bozho坐得太久/很多在JSF的世界:) – BalusC 2010-02-08 14:47:13

+0

多一個問題卡住了這段代碼得到了一個bean擁有dc頭的細節,也包含列表(dc itmes),現在我感到在填充servlet中的bean,我的代碼在servlet中是 String dcno = request.getParameter(「dcno」); CallableStatement cb = con.prepareCall(「{call spPrintDC(?)}」); cb。setString(1,dcno); ResultSet rs = cb.executeQuery(); ArrayList datalist = new ArrayList (); 如果(!rs.wasNull()){ 而 (rs.next()){ // datalist.add()}} 的trnprintdc豆中有另一個listof dcdetails,dcdtls爲語句列表號碼 。 :-( – sansknwoledge 2010-02-09 17:49:08

1

複製粘貼大部分。然後對其進行編輯,從而使表的每一行(<tr>)必須從數據中包含一行,所以使用:

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