zoukankan      html  css  js  c++  java
  • 分页框架(Pager-taglib)的使用及sitemesh的简单使用

    首先去Maven仓库(http://mvnrepository.com)下载pager-taglib.jar包,它的官网貌似挂掉了.

    当然了,说到分页,当然得建立分页bean,如下图所示:

    然后建立存放分页请求参数的类SystemContext,该类中用到了ThreadLocal,它是一个跟当前线程相关的Map,它的key就是当前线程的名字

    接着配置SystemContextFilter的过滤器,对所有请求都拦截.

    1  <filter>
    2       <filter-name>SystemContextFilter</filter-name>
    3       <filter-class>com.scitc.page.web.SystemContextFilter</filter-class>
    4   </filter>
    5   <filter-mapping>
    6       <filter-name>SystemContextFilter</filter-name>
    7       <url-pattern>/*</url-pattern>
    8   </filter-mapping>
    View Code

    在SystemContextFilter中对页面请求参数进行处理,放入ThreadLocal中.

    在DAO层,进行分页处理

     1 package com.scitc.page.dao;
     2 
     3 import java.util.HashMap;
     4 import java.util.List;
     5 import java.util.Map;
     6 
     7 import org.apache.ibatis.session.SqlSession;
     8 
     9 import com.scitc.page.domain.Pager;
    10 import com.scitc.page.domain.User;
    11 import com.scitc.page.util.MyBatisUtil;
    12 import com.scitc.page.util.SystemContext;
    13 
    14 public class UserDao {
    15     public Pager<User> find(String name) {
    16 
    17         Map<String, Object> params = new HashMap<String, Object>();
    18         if (name != null && !name.equals(""))
    19             params.put("name", "%" + name + "%");
    20         int pageSize = SystemContext.getPageSize();
    21         int pageOffset = SystemContext.getPageOffset();
    22         String order = SystemContext.getOrder();
    23         String sort = SystemContext.getSort();
    24         Pager<User> pages = new Pager<User>();
    25         SqlSession session = null;
    26         try {
    27             session = MyBatisUtil.createSession();
    28             params.put("pageSize", pageSize);
    29             params.put("pageOffset", pageOffset);
    30             params.put("sort", sort);
    31             params.put("order", order);
    32             List<User> datas = session.selectList(User.class.getName()+ ".find", params);
    33             pages.setDatas(datas);
    34             pages.setPageOffset(pageOffset);
    35             pages.setPageSize(pageSize);
    36             int totalRecord = session.selectOne(User.class.getName()+".find_count", params);
    37             pages.setTotalRecord(totalRecord);
    38         } finally {
    39             MyBatisUtil.closeSession(session);
    40         }
    41         return pages;
    42     }
    43 }
    View Code

    Mybatis中的SQL配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5   
     6 <mapper namespace="com.scitc.page.domain.User">
     7 
     8     <!-- 注意namespace不是别名,User的别名在mybatis.config.xml中的<typeAliases> -->
     9     
    10     <insert id="add" parameterType="User">
    11         INSERT INTO t_user (username,password,nickname) 
    12         VALUES(#{username},#{password},#{nickname}) 
    13     </insert>
    14     <delete id="delete" parameterType="int">
    15         delete from t_user where id=#{id}
    16     </delete>
    17     <update id="update" parameterType="User">
    18         update t_user set username=#{username} where id=#{id}
    19     </update>
    20     <select id="load" parameterType="int" resultType="User">
    21         select * from t_user where id=#{id}
    22     </select>
    23     <!-- List的返回结果仍可为User -->
    24     <select id="list" resultType="User">
    25         select * from t_user
    26     </select>
    27     <!-- #{sx}会使用?进行替代 ,$(xx)会完整将字符串完成替代-->
    28     <select id="find" resultType="User" parameterType="map">
    29         select * from t_user
    30         <!-- 动态SQL -->
    31         <where>
    32             <if test="name!=null"> (username like #{name} or nickname like #{name})</if>
    33         </where>
    34         
    35         <if test="sort!=null">
    36             order by ${sort}
    37             <if test="order!=null">
    38             ${order}
    39             </if>
    40         </if>
    41         limit #{pageOffset},#{pageSize}
    42     </select>
    43     
    44     <select id="find_count" parameterType="map" resultType="int">
    45         select count(*) from t_user 
    46         <if test="name!=null">where (username like #{name} or nickname like #{name})</if>
    47     </select>
    48 </mapper>
    View Code

    为什么我们要使用ThreadLocal呢?

    主要是对跨层数据传输的处理,前面也提到了它是一个当前线程Map,所以使得跨层也可以传输数据

    好了,pager-taglib暂时说到这里,接下来说说sitemesh

    什么是sitemesh呢?

    它是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。

    首先下载sitemesh的jar包,下载方法可以去官网,也可以去Maven仓库

    接下来配置sitemesh的过滤器

    1 <filter>
    2     <filter-name>sitemesh</filter-name>
    3     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
    4   </filter>
    5 
    6   <filter-mapping>
    7     <filter-name>sitemesh</filter-name>
    8     <url-pattern>/*</url-pattern>
    9   </filter-mapping>
    View Code

    模版页面的配置

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title><decorator:title default="欢迎使用xxx系统"/></title>
     9 <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/main.css"/>
    10 <decorator:head/>
    11 </head>
    12 <body>
    13 <a href="">其他操作</a>
    14 <hr/>
    15 <h3 align="center"><decorator:title default="详细信息"/></h3>
    16 <decorator:body/>
    17 <hr/>
    18 <div align="center" class="distance">
    19     55555555
    20 </div>
    21 <div align="center" class="footer">
    22     CopyRight@2012-2015<br/>
    23     scitc
    24 </div>
    25 </body>
    26 </html>
    View Code

    最后效果如图

    附件下载

  • 相关阅读:
    内容页超连接关键词的完美实现
    鼠标经过文字链接时出现漂亮的提示层
    简单的jQuery检测注册用户名
    触发Repeater中的Dropdownlist的SelectedIndexChanged如何获得Repeater的当前行
    读取XML的节点属性并绑定到ListBox
    第十八章 6string型字符串的替换 简单
    第十八章 2string字符串 简单
    第十七章 特殊成员_函数指针也可以做为参数 简单
    第十七章 特殊成员_类的函数指针 简单
    第十七章 特殊成员_成员函数指针数组 简单
  • 原文地址:https://www.cnblogs.com/ylfeiu/p/3966367.html
Copyright © 2011-2022 走看看