JSP自定义标签查询多条数据

JSP自定义标签
placeholder image
admin 发布于:2015-11-18 17:10:18
阅读:loading

基本描述

在说这个查询列表标签之前,我认为有必要先看看另一篇文章,查询一条明细数据的标签 ,同之前的一样,先给出参数定义,然后再根据参数与查询需求给出逻辑实现图,围绕图再介绍一下每个参数的意义,图片参考如下:

结构图.gif

参数说明

sql:查询列表的sql语句;

sqlKey:sql语句的映射,可配置sql,然后自己提供映射实现,与sql参数两者选其一中,如果两种参数都有,则优先取本参数;

javaBeanClassName:将查询列表的结果集中的每条数据转换为实体类型对象,可选参数,如为空,则将每条数据转换为map类型;

notDataTip:如果查询无记录时,判定此参数是否存在数据,如果存在数据则使用数据替换标签内容体数据;

maxLens:如果查询有记录时,判定此参数是否存在数值,如果存在则判断记录数是否大于此值,如果大于截取最大显示数据数量;

var:将查询出的List<Bean | Map<String , Object>>类型对象存储至pageContext范围内,配合jstl标签进行处理。

使用示例

1、导入标签库自不必说

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="my" uri="/tags"%>

2、查询一个下拉框

<select>

     <option>请选择:</option>

     <my:queryList var="menuList"

          sql="SELECT menuid 'menuId' , menuname 'menuName' FROM sysmenu">

        <c:forEach items="${menuList }" var="item">

            <option value="${item.menuId }">${item.menuName }</option>

        </c:forEach>

    </my:queryList>

</select>

3、查询一个列表

<table width="300" border="1" style="border-collapsecollapse;">

     <thead>

          <tr>

               <th>编号</th>

               <th>姓名</th>

               <th>出生日期</th>

          </tr>

     </thead>

     <my:queryList var="menuList"

         sql="SELECT

                menuid 'menuId' ,

                menuname 'menuName' ,

                createdate 'createDate'

               FROM

                   sysmenu

               ORDER BY

                     menuid limit 1,10" >

           <c:forEach items="${menuList }" var="sysMenu">

                <tr>

                     <th>${sysMenu.menuId }</th>

                     <td>${sysMenu.menuName }</td>

                     <td>${fn:substring(sysMenu.createDate,0 , 11) }</td>

                </tr>

           </c:forEach>

      </my:queryList>

</table>

4、查询一个列表,当没有数据时显示默认的提示信息

<table width="300" border="1" style="border-collapsecollapse;">

    <thead>

        <tr>

           <th>编号</th>

           <th>姓名</th>

           <th>出生日期</th>

        </tr>

    </thead>

    <my:queryList var="menuList"

         sql="SELECT * FROM sysmenu where 1=2"

             noDataTip="<tr><td colspan='3' align='center'>没有查询到数据!</td></tr>"

     >

       <c:forEach items="${menuList }" var="sysMenu">

           <tr>

               <th>${sysMenu.menuId }</th>

               <td>${sysMenu.menuName }</td>

               <td>${fn:substring(sysMenu.createDate,0 , 11) }</td>

           </tr>

        </c:forEach>

    </my:queryList>

</table>

5、查询一个列表,从逻辑上控制只显示前5条数据

<b>数据库共有数据

   <my:queryOne var="item" sql="select count(*) 'totalCount' from sysmenu">

      <label style="color:red;">${item.totalCount }</label></my:queryOne>

      条,查询时不设置返回最多的记录数,截取显示前5

</b>

<table width="300" border="1" style="border-collapsecollapse;">

<thead>

     <tr>

         <th>编号</th>

         <th>姓名</th>

         <th>出生日期</th>

     </tr>

 </thead>

<my:queryList var="menuList"

     sql="SELECT * FROM sysmenu"

         maxLens="5"

>

    <c:forEach items="${menuList }" var="sysMenu">

        <tr>

             <th>${sysMenu.menuId }</th>

             <td>${sysMenu.menuName }</td>

             <td>${fn:substring(sysMenu.createDate,0 , 11) }</td>

         </tr>

     </c:forEach>

    </my:queryList>

</table>

6、查询列表标签,以上各个参赛均可以相配合使用,至于javaBeanClassName参数的使用与此一致,不多说

此种实现方案存在的问题与解决办法:参考查询明细标签的介绍。

应用总结

此种实现方案是从实践中总结得出的,发现一般的业务需求完全没有问题,也支持标签之间的嵌套,比如查询一个列表标签,<c:forEach>循环时再循环嵌套查询条件,都是没有问题的。代码实现比较简单,实现的处理逻辑都已经说清楚了,至于自己实现起来应该是完全可以,由于标签处的代码继承体系稍微有点多,我就不具体整理代码,需要的留言,我单独发吧。如果非要有个运行效果,参考下图:

应用场景.png

说明:

(1)当前示例原始为JSP页面的动态示例,可从博客V1版本中开放的源码中获取,dmeo页面路径为“/demo/myTag/queryList.jsp”;

(2)实际上queryOne与queryList标签实现逻辑一样,可以通用;

 点赞


 发表评论

当前回复:作者

 评论列表


留言区