beetl 标签能否读取标签体的内容

龙图腾飞 发布于 2015/03/10 08:48
阅读 598
收藏 0

@闲.大赋 你好,想跟你请教个问题:beetl  标签能否读取标签体的内容

<#tag sql="select * from a where 1=1 ">
        <#tagparam paramSql=" and a = ?" value="1"></#tagparam>
 </#tag>
可否

加载中
0
闲大赋
闲大赋

标签体的内容是用tagBodyl来引用。


beetl默认不支持父子标签(父标签读取子标签属性,子标签读取父标签属性等),需要一定的扩展才能支持。不知道你属于哪种情况。貌似你用默认的tagBody就应该可以,如果你想复杂的使用,比如:
<#table id="tableId" style="kk" data="${userList}" var="row,index">
<#tr style="trcss1" name=""  > ${index} </#tr>
<#tr style="trcss1" name="名称" import="true" > ${row.name} </#tr>
<#tr style="trcss2" name="年纪"> ${row.age} </#tr>
<#tr style="trcss3" name="操作"> <#label icon="update">更新</#label><#label icon="update">delete</#label></#tr>
</#table>


这种父标签需要知道子标签(有多少个tr),子标签需要知道父标签(的样式和数据),则需要对beet进行一定扩展才能实现


0
龙图腾飞
龙图腾飞

您好 根据你的提示还有网上资料参考 现在还有其他几个问题,我先放上代码

SqlQueryListTag ->registerTag("SqlQueryList",SqlQueryListTag.class);

package net.zhuawa.util.btltag;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import net.zhuawa.util.btltag.pojo.ParamSql;
import org.beetl.core.BodyContent;
import org.beetl.core.GeneralVarTagBinding;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

public class SqlQueryListTag extends GeneralVarTagBinding {
	
	private String sql;
	private String attribute;
	private Integer pagesize;
	
	public void init(){
		String _sql = getAttributeValue("sql") != null ? getAttributeValue("sql").toString() :null;
		String _attribute = getAttributeValue("attribute") != null ? getAttributeValue("attribute").toString() :null;
		Integer _pagesize = getAttributeValue("pagesize") != null ? Integer.parseInt(getAttributeValue("pagesize").toString()) :0;
		setSql(_sql);
		setAttribute(_attribute);
		setPagesize(_pagesize);
	}
	
	@Override
	public void render() {
		init();
		BodyContent bodyContent = getBodyContent();
		ParamSql paramSql = MessageUtil.parseXml(bodyContent.getBody(),"param");
		String paramSqls = "";
		Object[] paramVaues = new Object[]{};
		if(null != paramSql){
			paramSqls = paramSql.getSql();
			paramVaues = paramSql.getObjects().length > 0 ? paramSql.getObjects() : paramVaues;
		}
		List<Record> queryList = Db.find(new StringBuilder(sql).toString().replace(":paramSql",paramSqls),paramVaues);
		
		HttpServletRequest request =  (HttpServletRequest)ctx.getGlobal("request");
		request.setAttribute("queryList", queryList);
		
//		this.binds(queryList);
//		this.doBodyRender();
//		int size = queryList.size();
//		if(size > 0){
//			for (int i = 0; i < size; i++) {
//				this.binds("index",i);
//				this.binds(queryList.get(i).getColumns(),i);
//				this.doBodyRender();
//			}
//		}
		
	}
	
	public String getSql() {
		return sql;
	}
	public void setSql(String sql) {
		this.sql = sql;
	}
	public String getAttribute() {
		return attribute;
	}
	public void setAttribute(String attribute) {
		this.attribute = attribute;
	}
	public Integer getPagesize() {
		return pagesize;
	}
	public void setPagesize(Integer pagesize) {
		this.pagesize = pagesize;
	}
}

html模板


<#SqlQueryList sql="select top 5 * from [Sys_Article] where inforcolumn = '002' :paramSql  order by  article_add_time desc,article_order asc" pagesize="15";list>
			<ParamSql>
				<param sql = " and 1 = 1"  />
			</ParamSql>
					<%
			for(entity in list){
			%>
			<a>标题</a>:
			<%}%>
</#SqlQueryList>



报错>>表达式值为空(NULL):list,如果单独${ list}是可以打印出来的


这样用法还有一个问题这个标签bodyContent.getBody()获取标签的的body如果要组织html代码的话(以上html代码处

<a>标题</a>:
)会被 bodyContent.getBody()一块读取


我想在标签体外获取变量 并遍历 怎么弄

<#SqlQueryList sql="select top 5 * from [Sys_Article] where inforcolumn = '002' :paramSql  order by  article_add_time desc,article_order asc" pagesize="15";list>
			<ParamSql>
				<param sql = " and 1 = 1"  />
			</ParamSql>
		</#SqlQueryList>
		<%
			for(entity in list){
		%>
			<a>标题</a>:
		<%}%>







返回顶部
顶部