2011-12-20 38 views
5

Tôi có tài nguyên còn lại với phương thức sẽ trả về một số dữ liệu dưới dạng html. Chúng ta đang nói về một danh sách các báo cáo, đó là một lớp đơn giản bao gồm 6 biến thành viên chuỗi.Làm cách nào để tạo html từ đối tượng Java?

Tôi hỏi vì viễn cảnh của các yếu tố phụ thêm và giá trị vào một chuỗi có vẻ chậm và dễ bị lỗi, và tôi thực sự thích làm điều đó theo cách hướng đối tượng.

Trả lời

4

Cách thông thường để tạo HTML cho phản hồi web là sử dụng một JSP hoặc một công cụ tạo khuôn mẫu Java như Velocity hoặc FreeMarker.

Nếu bạn hiện đang trả về phản hồi dưới dạng XML, cách tiếp cận khác sẽ là sử dụng XSLT để chuyển đổi XML thành HTML. Việc xử lý XSLT có thể được thực hiện ở phía máy khách (trong trình duyệt) nếu bạn bao gồm một lệnh "xử lý" thích hợp trong XML liên kết với tài nguyên XSLT.


Tôi từng nghĩ rằng bashing chuỗi với nhau là một giải pháp hợp lý, nhưng sau đó tôi nhận ra rằng kết quả là bạn cứng dây HTML bố trí của bạn vào mã Java của bạn. Các phương pháp tiếp cận JSP, khuôn mẫu và chuyển đổi tất cả đều tránh điều này, cho phép bạn điều chỉnh HTML được tạo sau này trong chu kỳ phát triển; ví dụ. tại thời gian tích hợp hệ thống hoặc thậm chí đăng triển khai.

+0

tất cả khách hàng có hỗ trợ chuyển đổi phía máy khách không? – radai

+0

Không phải tất cả. Nhưng các trình duyệt web hiện đại làm - http://www.w3schools.com/XSL/xsl_browsers.asp –

+0

Tôi đã nghĩ về việc sử dụng XSLT, bạn có biết cách đưa lệnh xử lý vào xml được tạo từ danh sách Báo cáo hay không chú thích với javax.xml.bind.annotation.XmlRootElement? – Marmoy

0

Bạn có thể tuần tự hóa đối tượng thành XML và sau đó cung cấp XLST để tạo đầu ra HTML. Nhưng nếu nó chỉ là 6 stings tôi sẽ đi trước và chỉ cần nối chuỗi.

7

Đối với HTML đơn giản, hãy tạo trực tiếp dưới dạng văn bản. Các đề xuất khác về tuần tự hóa, XML và các phép biến đổi đều là quá mức cần thiết.

Có thư viện Java để giúp tạo ra HTML, như thế này:

  • jwebutils
    Một thư viện để tạo HTML 5 đánh dấu sử dụng Java. Nó cũng chứa hỗ trợ cho việc tạo đánh dấu JSON và CSS 3.
  • Jakarta Element Construction Set (ECS)
    API Java để tạo các phần tử cho các ngôn ngữ đánh dấu khác nhau trực tiếp hỗ trợ HTML 4.0 và XML. Bây giờ đã nghỉ hưu, nhưng một số người thực sự thích nó.

Nhưng nếu bạn tìm hiểu kiến ​​thức cơ bản về HTML hợp lệ, bạn có thể viết thói quen của riêng bạn.

Về tốc độ, lớp StringBuilder được thêm vào nhằm mục đích thao tác chuỗi nhanh hơn. Sự cân bằng không đồng bộ hóa. Điều đó có nghĩa là không an toàn thread. Tùy thuộc vào cách chương trình của bạn được cấu trúc, bạn có thể sử dụng đồng bộ hóa xung quanh bên ngoài mã đang thực hiện hiển thị HTML.

Đây là một lớp mẫu mà tôi vừa mới nấu trong Java 6 và một ứng dụng nhỏ để chạy nó. Mã này chỉ là một bằng chứng về khái niệm, chưa sẵn sàng cho sản xuất thời gian chính.

package com.example; 

/** 
* @author Basil Bourque 
*   © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
*/ 
public class ListToHtmlTransformer { 

    /** 
    * @param collection 
    *   of report titles. 
    * @return string containing source code for HTML5. 
    */ 
    public String render(java.util.Collection<String> reports) { 
     // This source code is not yet tested or made bullet-proof. Only meant for demonstrating concepts. 
     // Warning: This code is not thread-safe. Changes must be made before serious use. 
     // Warning: This code should be modified to produce proper HTML, such as escaping certain characters. 
     // This code generates minimal HTML5 as suggested here: http://www.brucelawson.co.uk/2010/a-minimal-html5-document/ 
     // Big tip: Note that HTML allows the use of apostrophe (single-quote) in place of double-quote. Mixes better with Java source code. 
     // The backslash + 'n' is an escape sequence in Java to generate a linefeed (Ascii/Unicode 10) for use here as a NewLine. 
     // In real life, you woud test your rendered HTML with an HTML validator such as: 
     // • http://html5.validator.nu/ 
     // • http://validator.w3.org/ 
     StringBuilder html = new StringBuilder(); 
     html.append("<!doctype html>\n"); 
     html.append("<html lang='en'>\n"); 

     html.append("<head>\n"); 
     html.append("<meta charset='utf-8'>\n"); 
     html.append("<title>Report of Reports</title>\n"); 
     html.append("</head>\n\n"); 

     html.append("<body>\n"); 
     html.append("<h1>List of Reports</h1>\n"); 
     // Make a list in HTML 
     html.append("<ul>\n"); 
     // Loop the list of reports passed as argument. 
     for (String report : reports) { 
      html.append("<li>" + report + "</li>\n"); 
     } 
     html.append("</ul>\n"); 
     html.append("</body>\n\n"); 

     html.append("</html>"); 

     return html.toString(); 
    } 

} 

Và một ứng dụng để chạy nó.

package com.example; 

import java.util.ArrayList; 

/** 
* 
* @author Basil Bourque 
*   © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
*/ 
public class App { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     ArrayList<String> listOfReports = new ArrayList<String>(); 
     listOfReports.add("Some report #1"); 
     listOfReports.add("Some report #2"); 
     listOfReports.add("Some report #3"); 
     listOfReports.add("Some report #4"); 
     listOfReports.add("Some report #5"); 
     listOfReports.add("Some report #6"); 

     ListToHtmlTransformer renderer = new ListToHtmlTransformer(); 
     String renderedHtml = renderer.render(listOfReports); 

     System.out.println("The following HTML was rendered: " + new java.util.Date().toString()); 
     System.out.println(renderedHtml); 
     System.out.println("*** End of HTML ***"); 
    } 

} 

Tôi đã cố gắng đăng HTML được hiển thị ở đây, nhưng StackOverflow cố gắng diễn giải nó dưới dạng HTML thay vì hiển thị nó.

Mẹo bổ sung: Bạn có thể sử dụng một trích dẫn (APOSTROPHE Unicode 39) thay vì báo giá kép (QUOTATION MARK Unicode 34) trong HTML & CSS để phân định các giá trị thuộc tính và như vậy. Trình duyệt xử lý tốt cả hai. Trích dẫn đơn giúp việc viết mã dễ dàng hơn nhiều trong mã Java của bạn, loại bỏ sự cần thiết phải thoát khỏi các dấu ngoặc kép. Lưu ý cách sử dụng của tôi trong mã ở trên, chẳng hạn như 'en''utf-8'.

Các vấn đề liên quan