Beetl

08.Beetl自定义方法以及直接访问java类方法---《Beetl视频课程》

笑着哭i 提交于 2019-12-04 09:13:52
本期视频实现了发布评论时间自定义显示; 内容简介:使用了自定义方法以及直接访问java方法实现了发布时间自定义显示 一起学beetl目录: https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK 自定义方法 我们想要实现类似于 ${ strutil.subString ("hello",1)} 这样的方法,在Beetl模板中直接使用函数。 一、集成Function 接口,实现call方法 call方法存在两个参数,一个是模板传输过来的参数列表 Object[] objects ,另外一个是beetl模板的上下文 Context 。 上下文中包含以下信息,需要用到可以自取。 byteWriter 输出流 template 模板本身 gt GroupTemplate globalVar 该模板对应的全局变量 byteOutputMode 模板的输出模式,是字节还是字符 safeOutput 模板当前是否处于安全输出模式 其他属性建议不熟悉的开发人员不要乱动 有几个注意事项,需要注意下: call方法要求返回一个Object,如果无返回,返回null即可 为了便于类型判断,call方法最好返回一个具体的类,如date函数返回的就是java.util.Date

剖析 “‘最好的模板引擎’Beetl剖析及与Tiny模板引擎对比”

China☆狼群 提交于 2019-12-03 14:15:52
http://blog.csdn.net/cndes/art ... 88771 这有一篇文章,说是剖析beetl模板引擎,并与同为国内的tiny模板引擎做对比(以下简称“剖析beetl”),其剖析过程公正,但结论却不正确(文中暗示的结论,而不是文章最后一段总结), 每次在百度里搜索beetl,这篇文章总会出现,也有打算使用beetl的人会将信将疑的把这文章发给我看以求证里面剖析是否正确。在beetl社区解释都比较费口舌,因此决定写一篇文章说明一下我观点。 那篇剖析文章太长,唯一上代码的地方就是beetl的 for循环实现源码,作者也拿出tiny 模板引擎的循环实现源码,来证明“tiny短小精悍,功能丰富,然而那个作者弄错了。 作者不清楚beetl的循环有一个重要功能,安全输出,代码如下(79行) // java 实现 if (collection == null) { if (!this.hasSafe) { BeetlException ex = new BeetlException(BeetlException.NULL); ex.pushToken(exp.token); throw ex; } else { it = new IteratorStatus(Collections.EMPTY_LIST); } } 也就是说在安全模式下,如果结果集为空,则不会进入循环体

04.Beetl常用内置函数以及安全输出---《Beetl视频课程》

回眸只為那壹抹淺笑 提交于 2019-12-03 06:59:55
本期视频实现了三个功能,模糊搜索、标签分类、登录/注销功能; 内容简介:使用了常用内置函数,以及安全输出,实现了上面提到的三个业务 一起学beetl目录: https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK 常用内置方法 date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yyyy-MM-dd" )} 返回指定日期 print 打印一个对象 print(user.name); println 打印一个对象以及回车换行符号,回车换号符号使用的是模板本身的,而不是本地系统的.如果仅仅打印一个换行符,则直接调用println() 即可 printFile 直接答应文件,文件路径以模板根目录为相对目录,printFile(‘‘/common/header.html’’); nvl 函数nvl,如果对象为null,则返回第二个参数,否则,返回自己 nvl(user,"不存在") isEmpty 判断变量或者表达式是否为空,变量不存在,变量为null,变量是空字符串,变量是空集合,变量是空数组,此函数都将返回true isNotEmpty 同上,判断对象是否不为空 has

07.HTML标签以及自定义定界符配置---《Beetl视频课程》

落花浮王杯 提交于 2019-12-03 06:59:30
本期视频实现了评论列表分页; 内容简介:使用了HTML完成分页抽取,并且介绍了自定义定界符 一起学beetl目录: https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK HTML标签 Beetl 也支持HTML tag形式的标签,个人认为,这是一种引用模板更加优雅的实现,能和静态HTML标签融为一体。 比如在一个模板中引用另外一个模板,我们可以使用include <%include("/common/page.html",{page:msgPage,action:"detail",condition:"&id="+blog.id!}){}%> 我们也可以为 page.html定义一个HTML标签,那他的调用方法就变成了下面这种。 <#page page="${msgPage}" condition='${"&id="+blog.id!}' action="detail"/> 是不是更加符合,静态HTML标签的习惯。 一、配置 HTML标签默认配置 #支持HTML标签 HTML_TAG_SUPPORT = true #标签以#号开头识别为HTML标签 HTML_TAG_FLAG = # #自定义标签文件Root目录和后缀 RESOURCE.tagRoot = htmltag RESOURCE

悠然乱弹:“最好的模板引擎”Beetl 剖析及与Tiny模板引擎对比

早过忘川 提交于 2019-12-03 04:17:29
Beetl的环境搭建 输入命令 git clone https://git.oschina.net/xiandafu/beetl2.0.git 不一会儿,输出了下面的内容 Cloning into 'beetl2.0'... remote: Counting objects: 5807, done. remote: Compressing objects: 100% (2145/2145), done. remote: Total 5807 (delta 3050), reused 5383 (delta 2733) Receiving objects: 100% (5807/5807), 14.60 MiB | 684.00 KiB/s, done. Resolving deltas: 100% (3050/3050), done. Checking connectivity... done. 嗯嗯,好的开头是成功的一半,不错,代码取下来了。 cd beetl2.0 mvn install 输出结果: [WARNING] [WARNING] Some problems were encountered while building the effective settings [WARNING] 'servers.server.id' must be unique but

新一代java模板引擎典范 Beetl

被刻印的时光 ゝ 提交于 2019-12-01 22:38:33
Beetl目前版本是2.1,大小667K,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下: 功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。 非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。 超高的性能:Beetl 远超过主流java模板引擎性能,如5-6倍于freemarker,2倍于传统jsp技术。而且消耗较低的CPU 易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。 支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。 扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签. 同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包. 关于性能 通过与主流模板引擎Freemarker,Velocity以及JSP对比,Beetl均远高于前面三个

05.Beetl标签函数以及定界符、占位符介绍---《Beetl视频课程》

浪子不回头ぞ 提交于 2019-12-01 22:38:20
本期视频实现了博客的详情页面; 内容简介:使用了标签函数layout完成详情功能 一起学beetl目录: https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK 标签函数 layout 所谓标签函数,即允许处理模板文件里的一块内容,功能等于同jsp tag。 如Beetl内置的layout标签 index.html <% layout("/inc/layout.html",{title:'主题'}){ %> Hello,this is main part <% } %> layout.html title is ${title} body content ${layoutContent} footer 第1行变量title来自于layout标签函数的参数 第2行layoutContent 是layout标签体{}渲染后的结果 关于layout标签,参考高级主题布局 layout标签函数,相当于把公共部分抽取出来,包裹主单个页面的个性化内容。 定界符、占位符 通俗易懂的说: 定界符就是 界定动态beetl语言 与 html静态代码之间的符号。 比如,在<%%>中间的代码,是beetl代码(被包裹的代码会被Beetl模板引擎编译), 而定界符之外的代码就是html静态代码(beetl语法不会生效)。 <

转:关于beetl集成struts2 +convention插件无法识别beetl模板的处理方案

自闭症网瘾萝莉.ら 提交于 2019-11-30 18:57:08
转自 jplus 文章 今天第一次接触这个模板引擎,感觉非常不错,平时都是使用spring mvc开发,目前教带学生做一个小项目,使用struts+guice+mybatis,于是想试试这个模板引擎开开实际使用情况。 因为目前项目完全采用零配置方案,就出现了一个问题 根据Beetl使用手册的说明: 需要在struts2配置文件里添加result-types做如下配置  <package name="default" namespace="/" extends="struts-default"> ....... <result-types> <result-type name="beetl" class="org.beetl.ext.struts2.Struts2BeetlActionResult" default="true" /> </result-types> <action name="HelloWorld" class="example.HelloWorld"> <result>/hello.html</result> </action> ........ </package> 在常规的基于struts配置文件的开发过程中是完全没有问题的,但是如果一旦与 convention集成将无法完全享受beetl的功能,除非使用注解完成复杂配置。 比较方便的是struts2是开源的

beetl 和 shrio 结合

流过昼夜 提交于 2019-11-30 06:26:18
shrio 提供有jsp 标签,供在jsp 里使用,如果想在beetl中使用,有俩种方法, 一是beetl支持集成jsp页面,所以你可以在在jsp里使用shrio标签 另外,beetl 使用自定义函数写了shiro tag功能,你可以像使用shiro标签那样使用shiro package com.ext; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.util.Map; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.bee.tl.core.GroupTemplate; /*gt.registerFunctionPackage("so",new ShiroExt ()); 你可以在模板里直接调用,譬如 @if(so.isGuest()) { */ public class ShiroExt { /** * The guest tag * * @return */ public boolean isGuest() { return getSubject() == null ||