上一期问题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);