2011-08-25 27 views
18

Tôi đang yêu các mẫu dao cạo trong .NET MVC 3. Có gì gần gũi với java không?Có ngôn ngữ tạo mẫu tương tự như Razor dành cho các ứng dụng web Java Spring không?

Tôi muốn được tìm kiếm một cái gì đó mà tôi có thể tránh sử dụng các thẻ JSTL và thay vào đó làm một cái gì đó như thế này:

<c:if test=${bla}> 
    <span>my html</span> 
</c:if> 

và thay vào đó làm

@if(bla) 
{ 
    <span>my html</span> 
} 

Tôi giả định phải có tương tự

Trả lời

24

Tôi muốn giới thiệu công việc của mình: Rythm template engine, một công cụ mẫu nhẹ và siêu nhanh trong Java sử dụng cú pháp giống như Razor. Rythm có các tính năng phong phú và hỗ trợ bố trí trang/thừa kế, thẻ tùy chỉnh (hoặc trong mẫu hoặc lớp java), tải lại động ở chế độ dev và nhiều hơn nữa.benchmark cho thấy nhịp điệu nhanh gấp 2 đến 3 lần so với Velocity trên một trang bình thường!

API rất đơn giản:

  1. render với chuỗi inline:

    String output = Rythm.render("@args String who;hello @who!", "world");

  2. render với mẫu file:

    String output = Rythm.render("hello.txt", "world");

Một giới thiệu ngắn gọn để RYTHM: http://software-lgl.blogspot.com.au/2012/03/rythm-easy-to-use-high-performance-java.html

cập nhật 20120701

Phiên bản mới nhất giới thiệu một tính năng gọi là "String Interpolation Mode", cho phép bạn thực hiện rất nhẹ chuỗi suy như sau:

String result = Rythm.render("hello @who!", "world"); 

A trình diễn đầy đủ tính năng được lưu trữ trên GAE: http://play-rythm-demo.appspot.com/

cập nhật trang web 20130406

Một nhịp fiddle is online now, và bạn có thể sử dụng nó để tìm hiểu cú pháp nhịp điệu. Hãy khám phá tại http://fiddle.rythmengine.org

cập nhật 20130513

  • tên gói thay đổi từ com.greenlaw110.rythm để org.rythmengine, id nhóm maven thay đổi phù hợp
  • Thanh toán website của dự án mới: http://rythmengine.org
+1

Đẹp, có vẻ đầy hứa hẹn! –

+0

Rythm 1.0.0-RC1 được phát hành. Với rất nhiều tính năng tuyệt vời. Điều gì về bộ nhớ cache một kết quả thẻ không thoát và gán nó cho một biến để sử dụng sau này như '@ myTag (...). Cache (" 3mn "). Raw(). Assign (" myTagResult ") ... @ myTagResult.escape ("html") '. Kiểm tra thêm trên http://software-lgl.blogspot.com.au/2012/04/playrythm-100-rc1-released.html –

+0

có vẻ như sản phẩm của bạn không còn được duy trì tích cực nữa (đánh giá bởi việc thiếu hoạt động trên github)? – sawe

2

Hãy thử xem xét vận tốc (http://velocity.apache.org)

4

Xuân hỗ trợ một số ngôn ngữ templating:

Để biết thêm về cách tích hợp với Spring, hãy xem this page.

Ngoài ra, có StringTemplate, trong khi không được tham chiếu trong tài liệu chính thức của Mùa xuân, can be used làm công cụ tạo mẫu Spring.

Và nếu bạn thực sự muốn di chuyển tự nhiên, here's a page với khoảng một tỷ động cơ mẫu khác.

+1

Đây là câu trả lời tốt nhất, mặc dù không ai trong số những có cùng một mã thông minh kiểu dao cạo vs phân tích cú pháp html mà làm cho nó một niềm vui như vậy để sử dụng. –

7

Theo như tôi biết, không có gì trông và hoạt động khá giống như Razor trong thế giới Java đó. Từ những gì tôi có thể hiểu được, công cụ tạo khuôn trong Razor không chỉ phân tích cú pháp "placeholders" trong văn bản tĩnh, như #xxx trong Velocity hoặc ${xxx} trong JSP.

Thay vào đó, biểu tượng @ trong Dao cạo hoạt động như một chuyển đổi để chuyển sang trình phân tích cú pháp ngôn ngữ lưu trữ (VB và C# trong trường hợp Dao cạo), nhận cú pháp đầy đủ của phần tử ngay sau ký hiệu @. Điều này cho phép Razor nhận ra cả hai tên của các đối tượng được truyền cho động cơ cũng như các cấu trúc cú pháp như cho các vòng lặp và các điều kiện.

này mở ra toàn bộ sức mạnh của ngôn ngữ cấp hosting để te Razor mẫu, mà có thể là một điều nguy hiểm trong tay kẻ xấu ...

Hầu hết các công cụ khuôn mẫu ở phía Java của thế giới đã conciously chọn tách riêng logic nghiệp vụ khỏi các mối quan tâm templating và do đó có rất hạn chế hoặc không hỗ trợ cho các tính năng động như vòng lặp hoặc điều kiện trong mẫu "ngôn ngữ" của họ, chọn kiểu khai báo trên động.

3

Hãy xem twirl, công cụ tạo khuôn mẫu của khung công cụ Play separa ted từ khuôn khổ.

Ví dụ:

@if(items.isEmpty) { 
    <h1>Nothing to display</h1> 
} else { 
    <h1>@items.size items!</h1> 
} 
Các vấn đề liên quan