Phoenix :Spring的现代模板引擎


Phoenix 是 Spring 和 Spring Boot 的现代模板引擎,旨在通过提供一种创建复杂和模块化模板的方法来促进复杂 Web 应用程序的开发,该模板受益于服务器端渲染,以便更好地集成前端和后端。

Phoenix 与 Thymeleaf 或 Freemarker
与目前其他现有模板引擎相比,Phoenix 具有以下几个优势:

  • 能够将 Java 代码直接集成到 HTML 模板中,而无需学习新语法或特殊实用程序。
  • 一种更容易理解的语法,只需要一个特殊字符“@”即可将Java代码集成到HTML代码中。
  • 可以组合和重用的片段或组件,使代码更易于维护。
  • 速度、速度、速度 - Phoenix 模板经过编译,渲染速度比 Thymeleaf 快 10 倍。
  • 单个 PhoenixController 可以轻松返回 HTML 页面和 JSON 响应。
  • 反向路由——Spring 的一个全新功能。URL 在运行时写入模板中,无需手动写入。您只需要提及控制器和方法,Phoenix 就会计算出正确的 URL。这样,您就可以更改控制器中的 URL,而无需修改模板。
  • 通过从 JS 调用后端来动态修改页面以获得可随时添加到 DOM 的片段/模块。
  • 易于配置*(正在进行中以减少必要的依赖性)。


为什么选择 Phoenix 而不是 React/Angular/Vue?
Phoenix 无意成为 JS 框架的替代品。相反,Phoenix 的目标是利用现有的 JS 框架添加 SSR,从而提高页面渲染速度和 FE-BE 集成。您不再需要总是返回复杂的 JSON;您可以直接提供一个 HTML 页面,其中包含所需的所有内容,仅此而已。关于 SSR 与非 SSR 可能存在很大的争论,因此 Phoenix 试图结合两者的优势。

代码展示:

@import java.util.List;

@constructor(int a, int b)
<head>
    <title>Test page</title>
    <link href="@asset.path("\css\mycss.css")" rel="stylesheet" />
</head>
<body>
    @users.fragment()
    @if(a == 0) {
    <h6>@b</h6>
    }

    <a href=
"@routes.TestController.renderTestPage()">Test</a>

    @if(b == 0) {<h6>AAAA</h6>}

    @for (int count = 0; count < 10; count++) {
    <span>@count</span>
    }
</body>

  • Phoenix 具有易于使用的语法,允许您直接在 HTML 模板文件中编写 Java 代码。特殊@字符表示将被转换为 Java 代码并编译的非 HTML 代码。
  • 使用@import关键字,您可以使用 Java 或应用程序中的任何类。这将允许您在模板中使用该类。
  • 每个模板必须有一个构造函数。这是使用 hte@constructor()元素完成的。
  • 使用@后跟变量名称的字符来引用模板中任何位置的变量。呈现模板后,字符串表示形式将显示在 HTML 代码中。
  • 使用@if语句定义条件块。