javascript 模板 javascript-jstl
来源:互联网 发布:快乐十分助赢软件 编辑:程序博客网 时间:2024/05/20 14:25
下载地址: http://code.google.com/p/javascript-jstl/downloads/list
1. 支持el表达式
2. 支持javascript脚本
3. 支持tag
4. 支持自定义tag
1. 示例:
1. 对el表达式的支持
var context = {"user": {"name": "tom"}}; var source = "Hello, ${this.user.name}"; var scriptlet = jsp.runtime.JspRuntime.compile(source); var result = scriptlet.execute(context); logger.debug(result);2. 对script的支持
var context = {"user": {"name": "tom"}}; var source = "<% var user = pageContext.getAttribute(\"user\"); out.println(user.name);%>"; var scriptlet = jsp.runtime.JspRuntime.compile(source); var result = scriptlet.execute(context); logger.debug(result);
3. 对tag的支持
// 对标签的支持, 几乎支持j2ee核心标签库中的所有标签, sql和fmt除外, 这些在js中也用不到 var context = {"user": {"name": "tom"}, "userList": [1, 2, 3]}; // c:each是c:forEach的简写, 都可以 var source = "<c:if test=\"${1 == 1}\">hello world!</c:if> <c:each items=\"${this.userList}\" var=\"myuser\" varStatus=\"status\"><p>${myuser\}</p></c:each>"; var scriptlet = jsp.runtime.JspRuntime.compile(source); var result = scriptlet.execute(context); logger.debug(result);
4. 自定义标签的支持
var test = Package.create("test.taglib"); var DateFormatTag = test.taglib.DateFormatTag = jsp.taglib.TagFactory.create(jsp.taglib.TagSupport, function(){}); // 定义getter和setter方法 DateFormatTag.prototype.setter ... DateFormatTag.prototype.doEndTag = function(){ this.getPageContext().getWriter().print("Hello World !"); return jsp.taglib.Tag.EVAL_PAGE; }; // 通过如下代码导入自定义标签 var tagLibrary = jsp.runtime.JspRuntime.getTagLibrary(); if(tagLibrary != null) { tagLibrary.setup({ "c": {"format": "test.taglib.DateFormatTag"} }); }在模板中使用自定义标签
<c:format var="userBirthday" value="${this.user.birthday}" pattern="yyyy-MM-dd HH:mm:ss SSS"/>2. 如果你仅仅需要el表达式和脚本的支持,而不需要标签库的支持的话,只要不导入标签库的js即可
<!-- 必须的 --> <script type="text/javascript" src="jstl-1.0.1.js"></script> <!-- 可选的 --> <script type="text/javascript" src="jstl.taglib.js"></script> <!-- 可选的 依赖于jstl.taglib.js --> <script type="text/javascript" src="jstl.taglib.core.js"></script> <!-- 可选的 自定义标签库 依赖于jstl.taglib.js 和 jstl.taglib.core.js --> <script type="text/javascript" src="jstl.taglib.scrollpage.js"></script>
3. 编译出来的对象可以多次使用
var scriptlet = jsp.runtime.JspRuntime.compile(source); var source = "<c:if test=\"${1 == 1}\">hello world!</c:if> <c:each items=\"${this.userList}\" var=\"myuser\" varStatus=\"status\"><p>${myuser\}</p></c:each>"; var scriptlet = jsp.runtime.JspRuntime.compile(source); var result = scriptlet.execute(context); logger.debug(result);下次使用的时候再次调用scriptlet.execute(context);即可, 不需要重复编译, 每次传入的context可以是不同的对象
4. 错误检查
jsp中很容易写错代码, 比如少写了个{, 或者某些变量未定义, 由于代码是在编译后执行的, 因此很难根据浏览器报出来的错误信息定位错误,
因此, 编译之后返回的对象里面包含了编译过程产生的源代码, 可以使用如下代码查看
document.getElementById("mytxt").value = scriptlet.script;
如果不需要应该将scriptlet.script置为null:
scriptlet.script = null;
5. 模板管理器
可以使用类似如下的代码对模板进行管理和调用
var TemplateManager = {templates: {}};/** * @param name * @return Template */TemplateManager.getTemplate = function(name){ return this.templates[name];};/** * @param name * @param template * @return Template */TemplateManager.setTemplate = function(name, template){ this.templates[name] = template;};/** * @param name * @param context * @return Template */TemplateManager.evaluate = function(name, context){ if(name != null) { if(typeof(jQuery) == "undefined") { throw {"name": "ClassNotFoundException", "message": "'jQuery' not found !"}; } var e = jQuery("script[name=" + name + "]"); var template = this.getTemplate(name); if(template == null) { template = template = jsp.runtime.JspRuntime.compile(e.get(0).text); this.setTemplate(name, template); } if(template != null) { var target = e.attr("update"); if(target != null) { var html = template.execute(context); jQuery(target).html(html); } } }};模板代码:
<script name="tpl1" type="text/template" update="#body"><c:if test="${this.user.name == 'tom'}><h1>Hello, ${this.user.name}</h1></c:if></script>
调用代码:
jQuery(function(){ var context = {"user": {"name": "tome"}}; TemplateManager.evaluate("tpl1", context);});
- javascript 模板 javascript-jstl
- javaScript 中使用 jstl
- JavaScript模板
- jsp/JSTL/javascript 变量访问
- Javascript模板技术
- Javascript模板引擎
- javaScript 模板一
- 关于javascript模板
- javascript模板引擎
- javascript 模板 引擎
- 新一代 javascript 模板引擎
- 新一代 javascript 模板引擎
- javascript模板引擎 ICanHaz
- JavaScript模板引擎原理
- Javascript模板模式
- javascript编写模板
- javascript模板引擎 artTemplate
- javascript编写模板记录
- ddd
- 和菜鸟一起学算法之递归和分治简单实例
- 如何才能使用apt-get使用本地安装源进行安装
- Linux内核中的list_head结构体以及list_entry宏
- 真正解决ScrollLayout与Gallery等组件的滑动冲突
- javascript 模板 javascript-jstl
- android从未安装的apk文件里获取信息(包信息,资源信息)
- perl:DNA序列翻译成氨基酸序列的若干方法,直接法,简并法,哈希法,以及perl中的uc和lc函数(上)
- review board 安装小结
- 为什么要研究页面价值
- Neville 算法解多项式插值
- Android BroadcastReceiver学习 01
- ListView异步加载图片的解决办法
- 10-22