
订阅
0有用+1
StringTemplate(简称ST)是由Terence Parr设计的模板引擎库,最初用于解决jGuru网站模板逻辑耦合问题。该引擎基于Java开发,支持C#、Python、Ruby、Objective-C、JavaScript、Scala等多语言移植版本,通过严格的模型-视图分离机制生成结构化文本,适用于代码生成、多语言网站开发等场景 [1-3]。核心类包括ST、STGroupDir和STGroupFile,模板语法采用$...$或<...>分隔符,支持动态属性作用域和迭代语法 [1]。
- 外文名
- StringTemplate
- 简 称
- ST
- 基 于
- Java
- 性 质
- 模板引擎库
特点介绍
播报编辑
使兰洒劝用断市地遥晚Str盼市ingTemplate可以严格保证业务逻辑和表现逻辑相分离,不会互相干扰,提高网站的开发和维护的效率危体兵。模型和视图分离所带来的优点包括:模板文件可以在相似的网站开发中重殃拜糠员用,清晰的模立阀府板文件可以作为网站开发的说立漏去明文档,模板文件可以单独修改。
发展历程
播报编辑
2012年1月13日,Stanislav Ochotnicky为Fedora系统打包了StringTemplate4的初始版本4.0.4-1。此后项目持续维护,版本不断更新(如4.0.8、4.2、4.3、4.3.1等),并与Fedora等发行版进行了多次系统级重建集成 [4]。2022年9月3日,项目主要维护者Terence Parr将版本更新至4.3.4,同步更新了项目配置及文档中的版本号 [5]。2025年4月29日,openeuler_bot将版本更新至4.3.2-1 [4]。
核心技术
播报编辑
StringTemplate的设计哲学强调严格的模型-视图分离原则 [3],其核心类包括ST、STGroupDir和STGroupFile。模板语法采用$...$或<...>作为表达式分隔符,支持动态属性作用域和迭代语法。数据绑定机制支持直接注入对象属性和聚合属性注入 [1]。
运营模式
播报编辑
StringTemplate是一款开源软件,采用BSD授权协议,其核心开发语言为Java。该软件支持跨平台运行,用户可通过Maven、Gradle等构建工具进行依赖配置,此外官方提供了IntelliJ插件便于在集成开发环境中使用。 [2] [6]
其版本号曾达到4.3.4,亦有发布于2025年的发行版记录为4.3.2。 [4-5]
核心团队
播报编辑
StringTemplate 由 Terence Parr 创建并主导开发,Terence Parr 是旧金山大学(University of San Francisco)的计算机科学教授。Terence Parr 自1989年起便致力于语言工具的研究,也是著名语言识别工具 ANTLR 的创建者 [8]。StringTemplate 也作为 ANTLR v3 的代码生成模板引擎,并随着 jGuru.com 和 ANTLR 项目的发展而不断完善 [6-7]。Terence Parr 于2007年出版了《The Definitive ANTLR Reference》一书 [7]。
基本语法
播报编辑
StringTemplate支持两种分隔符<...>和$...$
语法 | 描述 | 例子 |
<attribute> | 显示变量值或空串 | $user$ <user> |
<attribute.property> | 显示集合或对象的属性值或空串 | $user.name$ <user.name> |
<attribute.(expr)> | 与<attribute.property> 意义相同,但是如果expr是保留字,则必须使用<attribute.(expr)> | $user.(name_label)$ <user.(name_label)> |
<multi-valued-attribute> | 集合中多个属性连接在一起的值 | $users$ <users> |
<multi-valued-attribute; separator=expr> | 多个属性连接在一起,属性之间使用expr分隔 | $users; separator=", "$ <users; separator=", "> |
<template(argument-list)> | 调用其它模板,可以向该模板传递参数 | $bold()$ <bold(item=title)> |
<attribute:template(argument-list)> | 模板应用 | $name:bold()$ <name:checkoutReceipt(items=skus, ship=shipOpt)> |
<attribute:{argument-name_ | _anonymous-template}> | 应用匿名模板 | $users:{s|<li>$s$</li>}; separator="\n"$ <users:{s|<li>$s$</li>}; separator="\n"> |
<if(!attribute)>subtemplate<endif> | 条件语句 | $if(users)$ $users:{u|$u$}$ $endif$ <if(users)> <users:{u|<u>}> <endif> |
\$ or \< | 语法分隔符的转义表达 | \$ \< |
<\ >, <\n>, <\t>, <\r> | 转义字符 | $\n$ <\n> |
<! comment !>, $! comment !$ | 注释符号 | $! this is a comment !$ <! this is a comment !> |
