有没有类似于Razor的模板语言适用于Java Spring web应用程序?

23

我喜欢.NET MVC 3中的Razor模板。是否有类似于Java的东西?

我想寻找一种可以避免使用JSTL标签,而是像这样做的东西:

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

并且改为

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

我假设一定有类似的东西

5个回答

29

我想介绍一下我的工作:Rythm模板引擎,这是一个使用Razor语法的Java超轻量级和超快速的模板引擎。Rythm具有丰富的功能,支持页面布局/继承,自定义标签(可以在模板或java类中),开发模式下的动态重新加载等。根据基准测试,Rythm在普通页面上比Velocity快2至3倍!

API很简单:

  1. 使用内联字符串进行渲染:

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

  2. 使用模板文件进行渲染:

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

Rythm的简要介绍:http://software-lgl.blogspot.com.au/2012/03/rythm-easy-to-use-high-performance-java.html

更新 20120701

最新版本引入了一个名为“String Interpolation Mode” 的功能,使您可以像以下方式一样进行轻量级字符串插值:

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

完整功能演示托管在GAE上: http://play-rythm-demo.appspot.com/

更新:20130406

现在有一个Rythm Fiddle网站,您可以使用它来学习Rythm语法。访问http://fiddle.rythmengine.org

更新:20130513

  • 包名已从com.greenlaw110.rythm更改为org.rythmengine,相应地更改了Maven Group ID。
  • 请查看新的项目网站:http://rythmengine.org

Rythm 1.0.0-RC1已发布,拥有许多令人惊叹的功能。例如缓存未转义标签结果并将其分配给变量以供以后使用,如@myTag(...).cache("3mn").raw().assign("myTagResult") ... @myTagResult.escape("html")。更多信息请查看http://software-lgl.blogspot.com.au/2012/04/playrythm-100-rc1-released.html。 - Gelin Luo
看起来你的产品似乎不再得到积极维护了(从Github上缺乏活动来判断)? - sawe
2
我很感谢你的观察。原因有几个:1. Rythm已经非常成熟和稳定,我仍然在许多项目中成功地使用它;2. 自2014年以来,我的重点已经转移到了http://github.com/actframework/actframework,是的,Rythm是该MVC堆栈中的默认模板解决方案;3. 我需要维护者加入我在Rythm和其他开源项目上的工作... - Gelin Luo

8
据我所知,在Java世界中没有一个看起来和行为上都像Razor的东西。
据我了解,Razor中的模板引擎不仅解析静态文本中的“占位符”,比如Velocity中的#xxx或JSP中的${xxx}
相反,Razor中的@符号作为一个切换器,可以切换到宿主语言解析器(在Razor的情况下是VB和C#),识别紧随@符号后面的元素的完整语法。这使得Razor能够识别传递给引擎的对象名称以及像for循环和条件语句这样的语法结构。
这为Razor模板打开了宿主语言的全部功能,但在错误的手中可能会带来危险...
在Java领域的大多数模板引擎都有意选择将业务逻辑与模板关注点严格分离,因此它们的模板“语言”对于循环或条件等动态特性支持非常有限或根本没有,而是选择声明式风格而非动态风格。

5

请看twirl,它是从Play框架中分离出来的模板引擎。

示例:

@if(items.isEmpty) {
  <h1>Nothing to display</h1>
} else {
  <h1>@items.size items!</h1>
}

5

Spring支持多种模板语言:

有关如何与Spring集成的更多阅读材料,请参见此页面

此外,还有StringTemplate,虽然在官方Spring文档中没有提到,但可以用作Spring模板引擎。

如果您真的想疯狂一下,这里有一个页面,列出了大约一百万个其他模板引擎。


1
这是最好的答案,尽管它们中没有一个具有相同的剃刀风格智能代码与HTML解析,使其如此令人愉悦使用。 - Tim H

2

建议尝试查看velocity(http://velocity.apache.org)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接