Groovy - Công cụ mẫu

Công cụ mẫu của Groovy hoạt động giống như trộn thư (tự động thêm tên và địa chỉ từ cơ sở dữ liệu vào thư và phong bì để tạo điều kiện gửi thư, đặc biệt là quảng cáo, đến nhiều địa chỉ) nhưng nó tổng quát hơn nhiều.

Tạo mẫu đơn giản trong chuỗi

Nếu bạn lấy ví dụ đơn giản dưới đây, trước tiên chúng ta đang xác định một biến tên để giữ chuỗi “Groovy”. Trong câu lệnh println, chúng ta đang sử dụng biểu tượng $ để xác định một tham số hoặc một mẫu nơi một giá trị có thể được chèn vào.

def name = "Groovy" 
println "This Tutorial is about ${name}"

Nếu đoạn mã trên được thực thi trong Groovy, kết quả sau sẽ được hiển thị. Kết quả cho thấy rõ ràng rằng $ name đã được thay thế bằng giá trị được gán bởi câu lệnh def.

Công cụ mẫu đơn giản

Sau đây là một ví dụ về SimpleTemplateEngine cho phép bạn sử dụng các script giống JSP và các biểu thức EL trong mẫu của bạn để tạo văn bản được tham số hóa. Công cụ tạo khuôn mẫu cho phép bạn liên kết danh sách các tham số và giá trị của chúng để chúng có thể được thay thế trong chuỗi có trình giữ chỗ đã xác định.

def text ='This Tutorial focuses on $TutorialName. In this tutorial you will learn 

about $Topic'  

def binding = ["TutorialName":"Groovy", "Topic":"Templates"]  
def engine = new groovy.text.SimpleTemplateEngine() 
def template = engine.createTemplate(text).make(binding) 

println template

Nếu đoạn mã trên được thực thi trong Groovy, kết quả sau sẽ được hiển thị.

Bây giờ hãy sử dụng tính năng tạo khuôn mẫu cho tệp XML. Bước đầu tiên, hãy thêm đoạn mã sau vào một tệp có tên là Student.template. Trong tệp sau, bạn sẽ nhận thấy rằng chúng tôi đã không thêm các giá trị thực tế cho các phần tử, mà là các phần giữ chỗ. Vì vậy, $ name, $ is và $ subject đều được đặt làm trình giữ chỗ sẽ cần được thay thế trong thời gian chạy.

<Student> 
   <name>${name}</name> 
   <ID>${id}</ID> 
   <subject>${subject}</subject> 
</Student>

Bây giờ, hãy thêm mã tập lệnh Groovy của chúng tôi để thêm chức năng có thể được sử dụng để thay thế mẫu trên bằng các giá trị thực tế. Những điều sau đây cần được lưu ý về đoạn mã sau.

  • Việc ánh xạ các phần tử giữ chỗ với các giá trị thực tế được thực hiện thông qua một liên kết và một SimpleTemplateEngine. Ràng buộc là một Bản đồ với phần giữ vị trí là khóa và phần thay thế là giá trị.

import groovy.text.* 
import java.io.* 

def file = new File("D:/Student.template") 
def binding = ['name' : 'Joe', 'id' : 1, 'subject' : 'Physics']
				  
def engine = new SimpleTemplateEngine() 
def template = engine.createTemplate(file) 
def writable = template.make(binding) 

println writable

Nếu đoạn mã trên được thực thi trong Groovy, kết quả sau sẽ được hiển thị. Từ kết quả đầu ra, có thể thấy rằng các giá trị được thay thế thành công trong các trình giữ chỗ có liên quan.

<Student> 
   <name>Joe</name> 
   <ID>1</ID> 
   <subject>Physics</subject> 
</Student>

StreamingTemplateEngine

Công cụ StreamingTemplateEngine là một công cụ tạo khuôn mẫu khác có sẵn trong Groovy. Đây là loại tương đương với SimpleTemplateEngine, nhưng tạo mẫu bằng cách sử dụng các bao đóng có thể ghi, làm cho nó có thể mở rộng hơn cho các mẫu lớn. Cụ thể, công cụ mẫu này có thể xử lý các chuỗi lớn hơn 64k.

Sau đây là một ví dụ về cách StreamingTemplateEngine được sử dụng:

def text = '''This Tutorial is <% out.print TutorialName %> The Topic name 

is ${TopicName}''' 
def template = new groovy.text.StreamingTemplateEngine().createTemplate(text)
  
def binding = [TutorialName : "Groovy", TopicName  : "Templates",]
String response = template.make(binding) 
println(response)

Nếu đoạn mã trên được thực thi trong Groovy, kết quả sau sẽ được hiển thị.

This Tutorial is Groovy The Topic name is Templates

XMLTemplateEngine

XmlTemplateEngine được sử dụng trong các kịch bản tạo mẫu trong đó cả nguồn mẫu và đầu ra dự kiến ​​đều là XML. Mẫu sử dụng ký hiệu $ {biểu thức} và $ biến thông thường để chèn một biểu thức tùy ý vào mẫu.

Sau đây là một ví dụ về cách sử dụng XMLTemplateEngine.

def binding = [StudentName: 'Joe', id: 1, subject: 'Physics'] 
def engine = new groovy.text.XmlTemplateEngine() 

def text = '''\
   <document xmlns:gsp='http://groovy.codehaus.org/2005/gsp'>
      <Student>
         <name>${StudentName}</name>
         <ID>${id}</ID>
         <subject>${subject}</subject>
      </Student>
   </document> 
''' 

def template = engine.createTemplate(text).make(binding) 
println template.toString()

Nếu đoạn mã trên được thực thi trong Groovy, kết quả sau sẽ được hiển thị

Joe
    
    
   1
    
    
   Physics