2010-02-05 27 views
20

Tôi muốn thay thế trình giữ chỗ động trong các thuộc tính trong một ứng dụng java. Giống nhưThay thế trình giữ chỗ động trong các thuộc tính trong java

WelcomeMessage=Welcome Mr. {firstName} {lastName} !!! 

Biến FirstName và LastName này cần được thay thế động. Chúng ta có nên sử dụng động cơ mẫu tốc độ cho giống nhau không? Hoặc có bất kỳ khung công tác mã nguồn mở nào khác không?

Cảm ơn, Manish

Trả lời

0

Vận tốc là công cụ tốt nhất hiện tại. Nhưng nó phụ thuộc vào loại tệp bạn muốn sử dụng làm mẫu.

Ví dụ: nếu bạn muốn sử dụng tài liệu MS từ làm mẫu, thì bạn phải mở rộng lớp vận tốc và viết triển khai của riêng bạn.

+0

quá nặng, quá phức tạp – msangel

43

Bạn có thể sử dụng lớp học MessageFormat của Java SE. Nó cho phép bạn làm chính xác những gì bạn yêu cầu.

Trong trường hợp của bạn, đoạn mã bên dưới phải thực hiện thủ thuật, giả sử đạo cụ chứa tất cả các thuộc tính được tải từ tệp của bạn.

MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last"); 

Lưu ý rằng tệp thuộc tính của bạn phải có chỉ mục tham số thay vì tham số được đặt tên như dưới đây.

WelcomeMessage=Welcome Mr. {0} {1} !!! 
+0

Nó không, vâng, ngoại trừ việc không thể giải thích, nó được định nghĩa sử dụng trình giữ chỗ số thay vì các ký tự tượng trưng có ý nghĩa. Tuyệt vời hơn bao nhiêu mà là sử dụng. –

+0

Đã chỉnh sửa câu trả lời của tôi giống như bạn đã nhận xét.:) –

6

Velocity là khá cũ và khó chịu, theo ý kiến ​​của tôi, có những cách đẹp hơn để làm điều này:

  • StringTemplate là đơn giản nhất của mẫu động cơ, và đủ tốt cho những gì bạn cần (xem ví dụ cú pháp here).
  • Nếu bạn đã sử dụng Spring 3, nó có lớp học PropertyPlaceholderHelper mà cũng có thể làm điều này, nhưng tôi sẽ không sử dụng Spring chỉ để giữ cho lớp này.
+0

Vận tốc không hoàn hảo. Tuy nhiên tôi nghĩ nó hoạt động rất tốt và tôi có thể giới thiệu nó rất nhiều. Hơn nữa khái niệm hộp công cụ cho phép tích hợp rất dễ dàng "logic khuôn mẫu" của riêng bạn. Và nó có sự tích hợp tuyệt vời với Servlets nói chung (và Struts 1.x) – Markus

0

Trong một ứng dụng web Java với JSF 2 mà sẽ làm việc như sau:

src \ \ webapp \ chính WEB-INF \ faces-config.xml

... 
    <resource-bundle> 
     <base-name>com.mycompany.resources.messages</base-name> 
     <var>mytext</var> 
    </resource-bundle> 
... 

src \ main \ resources \ com \ mycompany \ resources \ messages \ mytext.properties

WelcomeMessage = Welcome Mr. {0} {1} !!! 

index.xhtml

<h:outputFormat value="#{mytext.WelcomeMessage}" >   
    <f:param value="#{userSessionBean.first}" /> 
    <f:param value="#{userSessionBean.last}" /> 
</h:outputFormat> 
1

Một trong những cách này là chuỗi substitutor:

WelcomeMessage=Welcome Mr. ${firstName} ${lastName} !!! 

Map<String, String> valuesMap = new HashMap<String, String>(); 
valuesMap.put("firstName", "ram"); 
valuesMap.put("lastName", "Kumar"); 
StrSubstitutor sub = new StrSubstitutor(valuesMap); 
String message = sub.replace(WelcomeMessage); 
Các vấn đề liên quan