Bootstrap嵌入jqGrid,使你的table牛逼起来(4)

简介: Bootstrap嵌入jqGrid,使你的table牛逼起来

BaseConditionVO.java

package com.honzh.common.persistence;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
/**
 * 分页查询时的参数设置类.<br>
 * 
 * <P>
 * 1.PAGE_SHOW_COUNT──当然默认一页显示10。<br>
 * 2.pageNum──第几页。<br>
 * 3.numPerPage──一页显示多少,为空时,显示PAGE_SHOW_COUNT。<br>
 * 4.totalCount──总共数目。totalCount/numPerPage=多少页<br>
 * 5.orderField──排序的列。<br>
 * 6.orderDirection──排序的方向。
 * </P>
 */
public class BaseConditionVO {
  public final static int PAGE_SHOW_COUNT = 50;
  private int pageNum = 1;
  private int numPerPage = 0;
  private long totalCount = 0;
  private String orderField = "";
  private String orderDirection = "";
  /**
   * @Fields ps : 对参数类型进行封装.
   */
  private Map<String, Object> mo = new HashMap<String, Object>();
  public int getPageNum() {
    return pageNum;
  }
  public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
  }
  public int getNumPerPage() {
    return numPerPage > 0 ? numPerPage : PAGE_SHOW_COUNT;
  }
  public void setNumPerPage(int numPerPage) {
    this.numPerPage = numPerPage;
  }
  public String getOrderField() {
    return orderField;
  }
  public void setOrderField(String orderField) {
    this.orderField = orderField;
  }
  public String getOrderDirection() {
    return "desc".equals(orderDirection) ? "desc" : "asc";
  }
  public void setOrderDirection(String orderDirection) {
    this.orderDirection = orderDirection;
  }
  public long getTotalCount() {
    return totalCount;
  }
  public void setTotalCount(long totalCount) {
    this.totalCount = totalCount;
  }
  public int getStartIndex() {
    int pageNum = this.getPageNum() > 0 ? this.getPageNum() - 1 : 0;
    return pageNum * this.getNumPerPage();
  }
  public RowBounds createRowBounds() {
    RowBounds ro = new RowBounds(this.getStartIndex(), this.getNumPerPage());
    return ro;
  }
  /**
   * @Title: addParams
   * @Description: 添加查询条件
   * @param key
   * @param value
   */
  public void addParams(String key, Object value) {
    this.getMo().put(key, value);
  }
  /**
   * @Title: getParams
   * @Description: 获取查询条件
   * @param key
   * @return
   */
  public Object getParams(String key) {
    return this.getMo().get(key);
  }
  /**
   * @return the mo
   */
  public Map<String, Object> getMo() {
    return mo;
  }
  /**
   * @param mo
   *            the mo to set
   */
  public void setMo(Map<String, Object> mo) {
    this.mo = mo;
  }
  @Override
  public String toString() {
    return "条件:" + pageNum + "," + numPerPage + "," + totalCount + "," + orderField + "," + orderDirection + ","
        + mo;
  }
}



分页的查询数据对象,包括分页、排序、检索域。


protected BaseConditionVO getBaseConditionVOForTable() {

 BaseConditionVO vo = new BaseConditionVO();

 // 分页的参数

 int currentPage = getParaToInt("page");

 int sizes = getParaToInt("rows");

 String sortOrder = getPara("sord");

 String sortCol = getPara("sidx");

 vo.setNumPerPage(sizes);

 vo.setPageNum(currentPage);

 vo.setOrderField(sortCol);

 vo.setOrderDirection(sortOrder);


 return vo;

}


将jqGrid传递的参数转换为BaseConditionVO分页查询对象。


protected void renderXml(HttpServletResponse res, String xmlResponse) {

 try {

  res.setCharacterEncoding("UTF-8");

  res.setHeader("Content-type", "text/xml");

  PrintWriter out = res.getWriter();

  out.print(xmlResponse);

  if (out != null) {

   out.close();

  }

 } catch (IOException e) {

  logger.error(e.getMessage());

  logger.error(e.getMessage(), e);

 }


}

将xml写入到输出流中。


定义完了这些基础的对象,接下来,我们就要着手获取数据和传递数据了。

@SuppressWarnings("rawtypes")
  @RequestMapping(value = "datablePayDealOrdersList")
  public void datablePayDealOrdersList(HttpServletResponse response) {
    try {
      logger.debug("获取我支付的订单");
      XStreamComponent xstreamComponent = XStreamComponent.newInstance();
      // 获取列表参数
      BaseConditionVO vo = getBaseConditionVOForTable();
      vo.addParams("name", getPara("name"));
      logger.debug("我支付的订单查询" + vo);
      // 我创建的项目
      List myDealOrders = dealOrderService.getByIssueUid(vo, vo.createRowBounds());
      Long count = dealOrderService.searchIssueTotalCount(vo);
      String xmlResponse = xstreamComponent.toPageXML(createPageGrid(myDealOrders, vo, count.intValue()));
      renderXml(response, xmlResponse.replaceAll("__", "_"));
    } catch (UncategorizedSQLException e) {
      logger.error(e.getMessage());
      logger.error(e.getMessage(), e);
      renderXml(response, Constants.QUERY_ERROR);
    } catch (Exception e) {
      logger.error(e.getMessage());
      logger.error(e.getMessage(), e);
      renderXml(response, Constants.SERVER_ERROR);
    }
  }


我们来详细说明一下:


XStreamComponent.newInstance()创建xml流对象。

BaseConditionVO vo = getBaseConditionVOForTable();创建分页查询参数对象。

vo.addParams("name", getPara("name"));将检索域的值放入到查询对象中。

dealOrderService.getByIssueUid(vo, vo.createRowBounds());mybatis的分页查询方式,超简单,之前一个群里的朋友专门做了一种mybatis的分页组件,我觉得用原始的mybatis查询方法更有效率,之后,我们会写出对应的mybatis中xml的sql写法。

renderXml(response, xmlResponse.replaceAll("__", "_"));将数据写入到jsp的out输出流中。

最后,我们来介绍,通过mybatis如何获取分页数据。


mapper.java

package com.honzh.biz.database.mapper;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import com.honzh.common.persistence.BaseConditionVO;
public interface DealOrderMapper {
  @SuppressWarnings("rawtypes")
  List<HashMap> getByIssueUid(BaseConditionVO vo, RowBounds createRowBounds);
}


想mapper.xml传递的两个对象,分别是BaseConditionVO 还有分页的RowBounds ,xml中sql就会自动分页。


mapper.xml


<select id="getByIssueUid" resultType="hashmap" parameterType="map">
    select * from daa
  WHERE is_delete=0
  <if test="mo.name != null and mo.name != ''">
      and y.name like CONCAT('%','${mo.name}','%')
    </if>
     <choose>
    <when test="orderField !=null and orderField !=''">
     ORDER BY ${orderField} <if test="orderDirection != null and orderDirection != ''">${orderDirection}</if>
    </when>
    <otherwise>
     order by d.order_time DESC
    </otherwise>
  </choose>
    </select>


你完全可以不关注RowBounds ,mybatis内部会自动为你封装好limit的。

检索域的name可以直接通过mo.name或得到。

orderField、orderDirection也传递过来了。

到此为止,整篇的Bootstrap嵌入jqGrid就圆满结束了,ok,使你的table牛逼起来吧!


相关文章
|
JSON 前端开发 数据格式
bootstrap table表格的点击详情按钮操作
bootstrap table表格的点击详情按钮操作
101 1
|
6月前
|
前端开发 容器
bootstrap table 设置自定义列宽
【5月更文挑战第4天】bootstrap table 设置自定义列宽
|
前端开发 JavaScript
Bootstrap Table根据参数搜索功能
Bootstrap Table根据参数搜索功能
95 0
|
前端开发
bootstrap table表格去掉排序箭头
bootstrap table表格去掉排序箭头
202 2
|
前端开发
bootstrap table表格外面的边框全部去掉
bootstrap table表格外面的边框全部去掉
209 1
|
前端开发
bootstrap table点击修改按钮给弹框赋值
bootstrap table点击修改按钮给弹框赋值
50 0
|
JSON 前端开发 数据库
Bootstrap Table使用教程(请求json数据渲染表格)
Bootstrap Table使用教程(请求json数据渲染表格)
151 0
|
前端开发
bootstrap table分页悬停颜色改变
bootstrap table分页悬停颜色改变
38 0
|
前端开发
解决bootstrap table刷新加载时白色闪屏问题
解决bootstrap table刷新加载时白色闪屏问题
80 0
|
前端开发
bootstrap table+layer实现一个表格删除
bootstrap table+layer实现一个表格删除
55 0
下一篇
无影云桌面