《jetTemplate模板学习和使用.docx》由会员分享,可在线阅读,更多相关《jetTemplate模板学习和使用.docx(7页珍藏版)》请在三一办公上搜索。
1、jetTemplate模板学习和使用一、如何配置jetTemplate 首先需要把ViewResolver和View配置好: 指明使用的ViewResolver,和相应匹配的后缀,同时需要拿到一个配置文件: jetx.import.classes = jetbrick.template.samples.dao.*, jetbrick.template.samples.model.* jetx.autoscan.packages = jetbrick.template.samples jetx.template.loaders = $loader $loader = jetbrick.templ
2、ate.loader.ServletResourceLoader $loader.root = / $loader.reloadable = true 这个配置文件中指明了需要导入一些类: 在模板中,如果要用到一些其他的 Class, 那么可以先 import 进来,这样就可以在模板中使用短名字,比如 Date 而不是 java.util.Date。 和自动扫描的包: 如果我们实现了大量的扩展 methods, functions 或者 tags, 那么我们就要进行大量的配置,并且每次增加新的扩展 Class,我们就要修改配置文件,不是很方便。 为了解决这个问题,我们提供了指定扫描用户自定义的
3、扩展 Class,扫描的内容是: 方法扩展 Methods 全局函数 Functions 全局标签 Tags 我们需要在这里配置要扫描的包名,这样 JetEngine 就会在初始化的时候,到指定的包下面进行自动扫描(也会扫描子包中的 class),自动将扫描到的扩展 Class 注册到JetEngine。 支持定义多个扫描的包。 jetx.autoscan.packages = app.methods, app.functions, app.tags 要让 JetEngine 知道某个 Class 是扩展 Class,那么就需要在这个 Class 上面加入下面某个 Annotation Jet
4、Annotations.Methods JetAnnotations.Functions JetAnnotations.Tags 拓展方法:可以非常好的进行格式化处理和一些小的模板处理。 方法 Methods 我们知道一个 Java Class 的 所有 methods 都是定义在同一个 class 文件中的,不能在其他地方进行动态扩展。但是一些其他动态语言却支持在 Class 外部为这个 Class 增加一些方法。比如: JavaScript 的 prototype 机制 Groovy 的 metaClass 机制 jetbrick-template 也在这里带给大家强大的动态方法扩展机制。
5、如: $123.asInt $new Date.format(yyyy-MM-dd) $1, false, null.asJson 注意:如果 Class 已经定义了同名方法,则优先使用 Class 定义的方法。但是扩展方法支持方法重载 (Overrload)。 1. 定义扩展方法 语法: public static Object method_name ( Object object, args . ) 方法签名必须是 public 和 static 方法的第一个参数类型必须是要扩展的 Object, 其余参数自定义 允许定义相同名字的 method,但是方法参数不一样 支持可变参数 (Va
6、rArgs) 示例:对 String.class 进行扩展 package jetbrick.demo; public class StringMethods public static String link(String text, String url) return + text + ; 2. 注册扩展方法 用户自定义的扩展方法必须注册到 JetEngine 中才能使用。注册方法有 3 种途径: API 动态注册 JetEngine engine = . GlobalResolver resolver = engine.getGlobalResolver; resolver.regis
7、terMethods(StringMethods.class); 在配置文件中注册 jetbrick-template.properties jetx.import.methods = jetbrick.demo.StringMethods 自动扫描注册 o 配置扫描路径 jetx.autoscan.packages = jetbrick.demo o 为 Class 增加扫描 JetAnnotations.Methods JetAnnotations.Methods public class StringMethods . 3. 在模板中使用扩展方法 模板: $BAIDU.link( 输出结
8、果: a href= 4. 在扩展方法中获取 InterpretContext 上下文 要获取 InterpretContext 对象,可以通过 InterpretContext.current 方法获取当前 Thread local context 关联的 InterpretContext 对象。 JetAnnotations.Methods public class UserInfoMethods public static String isOnline(UserInfo user) InterpretContext ctx = InterpretContext.current; Htt
9、pSession session = (HttpSession) ctx.getValueStack.getValue(JetWebContext.SESSION); return session.getAttribute(user_ + user.getId) != null; 模板范例: #define(UserInfo user) $user.isOnline 二、model and view RequestMapping(/users) public String users(ModelMap modelMap) modelMap.put(userlist, DaoUtils.getU
10、serList); return users; 我们发现在这一块基本上没有什么区别,把数据对象放在map中,在后面的页面就可以帮我们完成整个的处理。 返回值表示对应的html文件。 这一块没有什么问题。这一块非常方便。 三、页面的布局 jetbrick-template samples ID 姓名 邮箱 书籍 #for(UserInfo user: userlist) $user.id $user.name $user.email 书籍列表 #end #include(includes/footer.jetx) 整个的思路也非常简单,就是使用#include和#tag layout_block(mainContent)两个标志就可以搞定了。 四、页面渲染 这一块也很简单,看上面的例子和官网上的说明就OK了。