上一期问题http://www.oschina.net/question/146876_227312
您好 根据你的提示还有网上资料参考 现在还有其他几个问题,我先放上代码
SqlQueryListTag ->registerTag("SqlQueryList",SqlQueryListTag.class);
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; } }
<#SqlQueryList sql="select top 5 * from [Article] where info = '002' :paramSql order by time desc,order asc" pagesize="15";list> <ParamSql> <param sql = " and 1 = 1" /> </ParamSql> <% for(entity in list){ %> <a>标题</a>: <%}%> </#SqlQueryList>
还有一个问题这个标签获取标签体的body(
bodyContent.getBody()
如果要组织html代码的话(以上html代码处
<a>标题</a>:
<#SqlQueryList sql="select top 5 * from [Article] where info = '002' :paramSql order by time desc,order asc" pagesize="15" ;list> <ParamSql> <param sql = " and 1 = 1" /> </ParamSql> </#SqlQueryList> <% for(entity in list){ %> <a>标题</a>: <%}%>
如果 ParamSql放在标签最前面,则有一个更简单的方法,就是在 ParamSql实现里处理所有业务逻辑,大概过程如下:
SqlQueryListTag的render方法:
HTTPRequestrequest=ctx.getGlobal("request");
request.setAttribute("SqlQueryListTag",this);
super.render();
此时beetl会首先执行ParamSql,逻辑可以放到在
ParamSql.render:
HTTPRequestrequest=ctx.getGlobal("request");
SqlQueryListTagtag=request.getAttribute("SqlQueryListTag");
Stringsql=tag.paras[1].get("sql");
Stringcond=getBodyContent().toString();
Listlist=dao.find(sql,cond);
tag.binds(list);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。