# qdbp-staticize **Repository Path**: qdbp/qdbp-staticize ## Basic Information - **Project Name**: qdbp-staticize - **Description**: 静态化模板库,类似jstl语法 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-15 - **Last Updated**: 2025-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 静态化模板库,类似jstl语法 可用于生成html、java、mybatis mapper文件等
输出内容可以是文件 (FilePublisher),也可以是其他内容
在 https://gitee.com/qdbp/qdbp-jdbc 这个项目就通过模板生成了SqlBuffer对象
https://gitee.com/qdbp/qdbp-jdbc/tree/master/jdbc-core/src/main/java/com/gitee/qdbp/jdbc/sql/parse/SqlBufferPublisher.java # 使用示例 ```java // 1.指定文件夹路径, 生成FileInputCreator URL path = ErrorIncludeTagPublisher.class.getResource("../template/"); String folder = PathTools.toUriPath(path); System.out.println(folder); IReaderCreator input = new FileInputCreator(folder); // 2.解析模板, 得到标签元数据树形结构 (正式应用时, metadata可以缓存) TagParser parser = new TagParser(input); IMetaData metadata = parser.parse("homepage.tpl"); // 3.准备数据 Map data = new HashMap(); Map channel = new HashMap(); channel.put("id", "100088"); channel.put("title", "资讯频道"); data.put("channel", channel); data.put("user", "zhaohuihua"); data.put("number", new Integer[] { 111, 222, 333, 444, 555, 666, 777, 888, 999, 1000 }); // 4.发布内容到目标文件 FilePublisher publisher = new FilePublisher(metadata, folder); publisher.publish(data, "homepage.html"); ``` # 详尽的错误提示 例如,else标签必须紧跟在if标签后面,但下例中第1行的if结束标签漏写了
就会报错TagException: errortest/include.if.tpl 8:5 errortest/error.if.tpl 6:5, , 没有找到匹配的前置标签
在include.if.tpl的第8行引用的error.if.tpl的第6行的标签出现错误 ```html #{i} 小于600 其他 ``` # 支持静态工具类调用 利用OGNL实现,使用方式是先导入包,再通过@XxxTools.method方式调用 ```html com.gitee.qdbp.tools.utils.DateTools com.gitee.qdbp.tools.utils.NamingTools com.gitee.qdbp.tools.utils.StringTools com.alibaba.fastjson.JSON ${@DateTools.toNormativeString(@DateTools.parse('2018/8/20 15:25:35'))} ${@NamingTools.toCamelString('user_name')} ${phone} is phone. ${@JSON.parse("{content:'Let\\'s go!'}")} json content: ${json.content} ``` 支持全局静态类导入,在taglib.txt中配置 ```properties @DateTools = com.gitee.qdbp.tools.utils.DateTools @StringTools = com.gitee.qdbp.tools.utils.StringTools @VerifyTools = com.gitee.qdbp.tools.utils.VerifyTools ``` # 特点介绍 * 与jstl最大的不同,是变量的作用域范围
如下示例,内层循环的同名变量i和s不会影响外层的,内层循环结束后,仍能正确输出外层循环的同名变量
```html index:${s.index} count:${s.count} begin:${s.begin} end:${s.end} first:${s.first} last:${s.last} value:${i} index:${s.index} count:${s.count} begin:${s.begin} end:${s.end} first:${s.first} last:${s.last} value:${i} ``` * 支持else标签 ```html ${i} 小于300 小于600 其他 ``` * 不会因为标签导致空行
解析标签时,进行了leadingBlank的特殊处理 ```html 例如这一段内容 text a text b text c 处理后, 相当于这样: text a text b text c ``` # 支持的标签 在settings/tags/taglib.txt中配置,可以自定义
前缀可以随便修改,<core:if>可以改成<c:if>,也可以改成<if>
但整个项目都是一致的,不支持每个页面单独定制前缀 ```properties core:include = com.gitee.qdbp.staticize.tags.base.IncludeTag core:import = com.gitee.qdbp.staticize.tags.base.ImportTag core:block = com.gitee.qdbp.staticize.tags.core.BlockTag core:if = com.gitee.qdbp.staticize.tags.core.IfTag core:elseif = com.gitee.qdbp.staticize.tags.core.ElseIfTag core:else = com.gitee.qdbp.staticize.tags.core.ElseTag core:each = com.gitee.qdbp.staticize.tags.core.EachTag core:comment = com.gitee.qdbp.staticize.tags.core.CommentTag core:set = com.gitee.qdbp.staticize.tags.core.SetVariableTag fmt:date = com.gitee.qdbp.staticize.tags.core.DateFormatTag ``` * 简单标签说明 ```html 用于定义一个块,限定变量的作用域 这个一个注释块 com.gitee.qdbp.tools.utils.DateTools用于导入静态类,详见前面的示例 条件判断 必须紧跟在if或elseif标签后面, 通过@AdjoinAfter注解实现 必须紧跟在if或elseif标签后面 用于引用其他模板 ``` * 标签,日期格式化 ```html pattern 指定输出的格式,可以是预定义的default/date/time,也可以自定义,与DateFormat格式一致 value 指定日期,如果不指定则默认为当前时间 var 保存日期字符串的变量。如果指定了var, 则将格式化后的文本保存到该变量;否则将文本输出到页面。 ``` * 标签,用于设置变量 ```html ${temp.userName} 通过scope指定作用域,parent/root/preset; 默认为parent; 如果指定scope=preset, 则可通过#{temp.userName}访问 如果指定了value, 则不允许有标签体 -- -- ${tempName} 如果没有指定value, 则标签体内容就是value, 此时标签体内容必须是一个表达式 -- ${userBean.displayName} ``` * 标签,循环输出内容 ```html status=迭代状态变量名 index: 从0开始的当前迭代索引 count: 从1开始的迭代次数计数 如 begin=20, end=29, step=3, 则index=[20,23,26,29], count=[1,2,3,4] begin: 开始行数 rows: 迭代行数 end: 结束行数(begin+rows-1=end) step: 迭代步长 limit: 迭代次数 first: 是否为第一次迭代 last: 是否为最后一次迭代 items=进行迭代的集合 如果没有指定items, 则begin必须, rows/end/limit必填其一 从6开始遍历5次, 6,7,8,9,10 ${s.count}-${i} 从6开始 ... 只显示第1条 ... ``` # MAVEN仓库地址 https://search.maven.org/artifact/com.gitee.qdbp/qdbp-staticize ```xml com.gitee.qdbp qdbp-staticize 3.5.5 ```