【问题标题】:Is there a templating language similar to Razor for Java Spring web applications?是否有类似于 Razor 的模板语言用于 Java Spring Web 应用程序?
【发布时间】:2011-11-03 18:52:11
【问题描述】:

我爱上了 .NET MVC 3 中的 razor 模板。有什么适合 java 的吗?

我正在寻找可以避免使用 JSTL 标签的东西,而是做这样的事情:

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

而是做

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

我假设一定有类似的

【问题讨论】:

    标签: java asp.net-mvc spring-mvc template-engine templating


    【解决方案1】:

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

    例子:

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

    【讨论】:

      【解决方案2】:

      我想介绍一下我的工作:Rythm template engine,这是一个轻量级且超快速的 Java 模板引擎,使用类似 Razor 的语法。 Rythm 具有丰富的功能并支持页面布局/继承、自定义标签(在模板或 java 类中)、在开发模式下动态重新加载等等。 benchmark 显示 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")。查看更多software-lgl.blogspot.com.au/2012/04/…
      • 看起来您的产品不再被积极维护(从 gi​​thub 上缺乏活动来判断)?
      • 感谢您的观察。有几个原因: 1. Rythm 相当成熟和稳定,我还在很多项目中使用它并取得了巨大的成功; 2. 自 2014 年以来,我的关注点已转移到 github.com/actframework/actframework,是的,Rythm 是该 MVC 堆栈中的默认模板解决方案; 3. 我需要维护者和我一起参与 Rythm 和其他开源项目...
      【解决方案3】:

      据我所知,在 Java 世界中,没有任何外观和行为与 Razor 非常相似。

      据我了解,Razor 中的模板引擎不仅解析静态文本中的“占位符”,例如 Velocity 中的 #xxx 或 JSP 中的 ${xxx}

      相反,Razor 中的 @ 符号充当切换到宿主语言解析器(在 Razor 的情况下为 VB 和 C#)的切换,识别紧跟在 @ 符号之后的元素的完整语法。这允许 Razor 识别传递给引擎的对象名称以及 for 循环和条件等语法结构。

      这为 Razor 模板打开了托管语言的全部功能,这在坏人手中可能是一件危险的事情......

      世界上 Java 方面的大多数模板引擎都有意识地选择将业务逻辑与模板关注点严格分开,因此对其模板“语言”中的循环或条件等动态特性的支持非常有限或不支持,因此选择声明式风格优于动态。

      【讨论】:

        【解决方案4】:

        Spring 支持多种模板语言:

        有关如何与 Spring 集成的更多信息,请参阅this page

        此外,还有StringTemplate,虽然没有在 Spring 官方文档中引用,但 can be used 作为 Spring 模板引擎。

        如果您真的想要疯狂,here's a page 与大约不计其数的其他模板引擎。

        【讨论】:

        • 这是最好的答案,尽管它们都没有相同的剃刀风格的智能代码与 html 解析,使得使用起来非常愉快。
        【解决方案5】:

        尝试查看速度 (http://velocity.apache.org)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-30
          • 2011-12-21
          • 2012-10-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多