扩展Beetl标签,支持父子嵌套和脚本绑定

工程例子在  https://git.oschina.net/xiandafu/beetl-json

安装

TAG.htmltag= com.beetl.tagext.HTMLTag
TAG.htmltagvar= com.beetl.tagext.HTMLVarBindingTag

例子

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>复杂的标签实现演示</title>
</head>
<body>

<p> 简单例子 <p>
<#simple>hello</#simple>

<p> 绑定例子 <p>
<#data var="name,index">
name=${name},index=${index}.
</#data>

<p>标签嵌套例子</p>
<%
var data = [{id:1,name:‘你好‘},{id:2,name:‘他好‘}];
%>
<#table data="${data}" var="row">
<#tr name="编号">${row.id}</#tr>
<#tr name="名称">${row.name}</#tr>
</#table>
</body>
</html>

让我们看看如何实现的

simple 标签

<h2>${tag.body}</h2>

与内置不同,获得标签体是调用tag.body, 也就是tag.getBody()方法

data 标签

data标签需要绑定变量,因此会在data.tag 脚本里调用本地方法@tag.binds 来绑定,然后tag.body执行,此处例子执行2次

<%
var name="ok";
var index = 1;
//绑定
@tag.binds(name,index);
for(var i=0;i<2;i++){
//执行标签体
%>
${tag.body} 
<%}%>

table 标签

可以调用tag.children获得标签体,然后分别执行标签体内容

<%
var trs = tag.children;
%>
<table>
<!--  显示表头 -->
<tr>
<% 
for(tr in trs){%>
<td><h2>${tr.name}</h2></td>
<%} %>
</tr>
<!--  显示数据 -->
<% for(row in tag.data) { 
//先绑定变量,这样tr能使用
@tag.binds(row);
%>
<tr>
<% for(tr in trs){ %>
    <td >${tr.body}</td>
<% } %>
<tr>
<%   } %>
</table>
时间: 2024-11-06 10:31:26

扩展Beetl标签,支持父子嵌套和脚本绑定的相关文章

简单扩展让beetl HTML标签支持父子嵌套

默认情况下,Beetl的html标签并不支持父子嵌套,就像类似jsp标签那样,父标签需要知道子标签的信息,子标签也需要知道父标签信息.但是beetl只需要简单扩展,就能完成嵌套标签支持. 首先看一个最终的使用效果,实现俩个html标签table.tag,tr.tag.可以在页面上这么用: <#table data ="${userList}"> <#tr class="3c" name="name"> 名称 </#t

基于Spring的可扩展Schema进行开发自定义配置标签支持

一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里进行和大家分享,也记录下方便以后复习备忘. 二.demo测试环境 1.JDK1.7 2.spring 4.2.5.RELEASE 3.基于Maven 4.开发工具Eclipse 三.项目介绍 1.实现步骤分析 [1].设计配置属性并开发JavaBean. [2].编写xsd文件. [3].编写Nam

Dubbo源码分析(三):自定义Schema--基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)

在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担.Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤: 设计配置属性和JavaBean 编写XSD文件 编

Spring可扩展Schema标签

基于Spring可扩展Schema提供自定义配置支持 http://blog.csdn.net/cutesource/article/details/5864562 WARN : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Ignored XML validation warning org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 66; s

浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet Explorer server的互操作.此外也可以在充分利用html在设计界面方面高效,简单的同时,也可以实现一些复杂的特性. 实现: Code Code highlighting produced by Actipro CodeH

python 函数嵌套支持多层嵌套,但不支持嵌套并列函数调用

def a (): def b (name='hlf'): def c(): print 'name: %s' % name return 'name: %s' % name return c return b #不支持并列嵌套无法调用到e这个函数 def e (id=1): print 'id: %s' % id return 'id: %s' % id return e #嵌套调用方法 a()()()

PHPnow开启PHP扩展里openssl支持的方法

PHPnow 是 Win32 下绿色的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境.更多介绍<PHP服务套件 PHPnow1.5.6>及安装<PHPnow 快速搭建Apache+PHP+MySQL环境 >.下面将分享PHPnow开启PHP扩展里openssl支持的方法. 打开你集成包的文件夹,找到“/php-5.2.x-Win32/php-apache2handler.ini”这文件,随便用记事本打开,查找 ;extensi

winfrom递归生成菜单,支持多级嵌套

private void Form2_Load(object sender, EventArgs e) { CreateMenu(); } private void CreateMenu() { //定义菜单条 Bar bar = new Bar("Menu Bar"); bar.MenuBar = true; bar.Stretch = true; bar.Style = eDotNetBarStyle.Office2003; dotNetBarManager1.Bars.Add(b

【Android自定义控件】支持多层嵌套RadioButton的RadioGroup

前言 非常喜欢用RadioButton+RadioGroup做Tabs,能自动处理选中等效果,但是自带的RadioGroup不支持嵌套RadioButton(从源码可看出仅仅是判断子控件是不是RadioButton),本文参考RadioGroup修改了一个支持嵌套CompoundButton的控件,非常实用. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 /** * 支持嵌套