Tôi có một dự án Spring MVC sử dụng Gạch Apache. Tôi đã thực hiện để tiêu đề có thể được đọc từ một nguồn tin như thế này:Hỗ trợ tiêu đề động và được dịch trong Gạch Apache
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" value="some-definition.title" cascade="true" />
</definition>
</tiles-definitions>
Và trong file template của tôi (được định nghĩa bởi public.base
), tôi thực hiện như sau:
<title><spring:message text="" code="${title}" /></title>
Bây giờ các công trình vĩ đại này cho các tiêu đề được dịch tĩnh, nhưng tôi cũng muốn hỗ trợ các tiêu đề động, ví dụ để hiển thị tên công ty. Tôi có thể làm như sau:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" expression="${company.name}" />
</definition>
</tiles-definitions>
Và sau đó chỉ cần xuất tiêu đề trong mẫu của tôi như sau: <c:out value="${title}" />
. Tuy nhiên, vấn đề là mã của tôi bị ngắt vì giá trị của thuộc tính title
không còn là khóa thông báo nữa. Tôi muốn có thể hỗ trợ các tình huống sau:
- Tiêu đề tĩnh, ví dụ: "Giới thiệu về chúng tôi"
- Tiêu đề hoàn toàn động, ví dụ: "$ {company.name}"
- Tiêu đề động với nội dung đã dịch, ví dụ: "Chào mừng bạn đến với $ {company.name}"
Lý tưởng nhất, tôi có thể sử dụng ngôn ngữ biểu thức trong nguồn tin nhắn của mình, nhưng tôi không thể làm việc đó. Tôi đã thử nghiệm khá nhiều với các giải pháp khác nhau, nhưng tôi dường như không thể tìm thấy một giải pháp tốt. Nếu tôi có thể sử dụng ngôn ngữ biểu hiện trong nguồn tin nhắn của tôi, thì điều này sẽ dễ dàng. Ví dụ, nó sẽ có thể làm như sau bằng cách nào đó?
some-definition.title = Hello there, ${company.name}
Và trong mẫu của tôi:
<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
ở trên không hoạt động, vì nó kết quả đầu ra ${company.name}
chứ không phải là nội dung thực tế của biến. Có cách nào để làm một việc như thế này không? Hoặc có cách nào khác để tôi có thể hỗ trợ các kịch bản mà tôi liệt kê ở trên không?
Tôi đã nghĩ về việc tạo thẻ JSTL tùy chỉnh nơi tôi sẽ phân tích biểu thức chuỗi trong mã Java đơn giản (chuỗi đã được dịch), nhưng tôi nhận ra rằng tôi có thể phải chỉ định rõ ràng đối tượng gốc cho biến thay thế "để làm việc, as documented here. Sau đó, nó không có vẻ như một giải pháp năng động như vậy.
Có cách nào để tôi có thể thực hiện tác vụ này không? Bất kỳ sự giúp đỡ nào cũng được đánh giá cao!
Xin chào Andy, tôi đã sử dụng Thymeleaf (với Gạch) và câu hỏi của bạn nhắc tôi lần đầu tiên tôi phải xử lý các tin nhắn: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf. html # messages –
Cảm ơn bạn đã liên kết, @PatrickLC. Bạn đúng rằng đây là cách bạn thường làm điều đó, và tôi đã làm như vậy trong quá khứ. Tuy nhiên, tôi vẫn không chắc chắn làm thế nào để làm điều này trong trường hợp sử dụng cụ thể của tôi mà không cần phải thông qua một cách rõ ràng các thông số khi dịch văn bản. Nó thậm chí không thể làm được những gì tôi muốn, tôi không chắc chắn. – Andy0708