Sử dụng text template trong Java với hapax2

Chào mừng các bạn đã quay trở lại với thachleblog. Mặc dù dạo này khá là bận rộn nhưng mình sẽ vẫn giữ tiến độ 2 blog/tuần. Thường các ngày trong tuần sẽ có một bài và bài còn lại vào cuối tuần. Bài viết hôm nay mình sẽ giới thiệu với các bạn một text template library trong Java đó chính là hapax.

Text template là gì? Hapax được sử dụng như thế nào? Rất là đơn giản, chúng ta cùng bắt đầu nhé.

text template trong java với hapax2

Sơ đồ mô tả vai trò của text template (Hapax)

Giới thiệu

Hapax là một implementation của Google Ctemplate. Hapax được sử dụng để truyền dữ liệu động vào cho html tĩnh thông qua Java. Ưu điểm của hapax là khá nhẹ và đơn giản. Chỉ làm việc trên html nên không phụ thuộc vào web framework, có thể sử dụng trong servlet, scripting languages và ứng dụng server – side…

Nói đến đây mà các bạn vẫn không hiểu hapax để làm gì thì các bạn nên qua thẳng phần ví dụ trước khi xem phần đặc điểm nhé 😀

Đặc điểm

Hapax hiểu đơn giản là một dạng html nhưng có khả năng truyền dữ liệu động thông qua Java.

Hapax cung cấp các tính năng:

  • Variable: dữ liệu được truyền vào html thông qua cú pháp {{variable}} hoặc {{=variable}}
  • Comment: comment được sử dụng bằng cú pháp {{!…t}}
  • Section: được hiểu như 1 phần của trang web (thao tác addSection) hoặc sử dụng như vòng lặp, cú pháp {{#sectionName}} … {{/sectionName}}
  • Include: đơn giản như include thư viện trong java script, những phần chung ta tách ra và include vào từng file với cú pháp {{>name}}

Ví dụ

Các bạn có thể tải hapax2 library về tại đây

File book.xtm (đổi định dạnh từ file html đổi định dạng để hapax đọc được). Mình có 1 table danh sách các book được truyền vào từ Java

  1. <!DOCTYPE html>
  2. table {
  3. font-family: arial, sans-serif;
  4. border-collapse: collapse;
  5. width: 100%;
  6. }
  7.  
  8. td, th {
  9. border: 1px solid #dddddd;
  10. text-align: left;
  11. padding: 8px;
  12. }
  13.  
  14. tr:nth-child(even) {
  15. background-color: #dddddd;
  16. }
  17. </head>
  18. <tr>
  19. <th>Id</th>
  20. <th>Name</th>
  21. <th>Category</th>
  22. </tr>
  23. {{#book}}
  24. <tr>
  25. <td>{{id}}</td>
  26. <td>{{name}}</td>
  27. <td>{{category}}</td>
  28. </tr>
  29. {{/book}}
  30. </body>
  31. </html>

Hapax2Example class

  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package thach.le.hapax2.example;
  7.  
  8. import hapax.Template;
  9. import hapax.TemplateDataDictionary;
  10. import hapax.TemplateDictionary;
  11. import hapax.TemplateException;
  12. import hapax.TemplateLoader;
  13. import hapax.TemplateResourceLoader;
  14.  
  15. /**
  16.  *
  17.  * @author thachlp
  18.  */
  19. public class Hapax2Example {
  20.  
  21. /**
  22. * @param args the command line arguments
  23. * @throws hapax.TemplateException
  24. */
  25. public static void main(String[] args) throws TemplateException {
  26. //TemplateLoader load resource
  27. TemplateLoader templateLoader = TemplateResourceLoader.create("thach/le/view/");
  28. //Template load file
  29. Template template = templateLoader.getTemplate("book.xtm");
  30. //Use TemplateDictionary to put to xtm
  31. TemplateDictionary templeDictionary = new TemplateDictionary();
  32. for (int i = 1; i <= 2; i++) {
  33. //Use TemplateDataDictionary to put data for section
  34. TemplateDataDictionary temp = templeDictionary.addSection("book");
  35. temp.setVariable("id", "" + i);
  36. temp.setVariable("name", "Life of PI");
  37. temp.setVariable("category", "Novel");
  38. }
  39. String data = template.renderToString(templeDictionary);
  40.  
  41. System.out.println(data);
  42.  
  43. }
  44.  
  45. }

Kết quả 

Code html

  1. <!DOCTYPE html>
  2. table {
  3. font-family: arial, sans-serif;
  4. border-collapse: collapse;
  5. width: 100%;
  6. }
  7. td, th {
  8. border: 1px solid #dddddd;
  9. text-align: left;
  10. padding: 8px;
  11. }
  12. tr:nth-child(even) {
  13. background-color: #dddddd;
  14. }
  15. </head>
  16. <tr>
  17. <th>Id</th>
  18. <th>Name</th>
  19. <th>Category</th>
  20. </tr>
  21. <tr>
  22. <td>1</td>
  23. <td>Life of PI 1</td>
  24. <td>Novel</td>
  25. </tr>
  26. <tr>
  27. <td>2</td>
  28. <td>Life of PI 2</td>
  29. <td>Novel</td>
  30. </tr>
  31. </body>
  32. </html>

Các bạn nếu có hứng thú thì đọc code, chỗ nào không hiểu mình sẽ giải thích nhé. Hoặc các bạn cũng có thể xem qua ở mức over view để hiểu về nguyên tắc hoạt động của hapax cũng như các ứng dụng java template chung, sau đó có thể sử dụng các framework khác dễ dàng.

Vừa rồi là phần trình bày của mình về hapax. Mình sử dụng hapax này và thấy khá hiệu quả. Tuy nhiên do đã hết được support từ 2011 nên document không nhiều. Hy vọng qua bài viết này các bạn có thể hiểu và sử dụng hapax (dự án mình làm đang xài cái này, khá là nhẹ và nhanh).

Hẹn gặp lại các bạn ở các bài viết sau.

Tham khảo thêm: https://code.google.com/archive/p/hapax2/wikis/Language.wiki