精华内容
下载资源
问答
  • jsp 分页显示数据,显示“页数”,“第几”,“上一” “下一页” “首页” “尾”“1,2,3,4,5……”;分页效果和平时所见的分页效果相同,数据库用hibernate链接 “上一”显示的数据和“1,2,3,4……”想...
  • 'last' => "末页" 19 ); 20 // 在分页信息中显示内容,可以自己通过set()方法设置 21 private $listNum = 10; // 默认分页列表显示的个数 22 23 /* * 24 构造方法,可以设置分页...

    显示效果:

    fpage.class.php 

      1 <?php
      2     /**
      3         file: page.class.php 
      4         完美分页类 Page 
      5     */
      6     class Page {
      7         private $total;                            //数据表中总记录数
      8         private $listRows;                         //每页显示行数
      9         private $limit;                            //SQL语句使用limit从句,限制获取记录个数
     10         private $uri;                              //自动获取url的请求地址
     11         private $pageNum;                          //总页数
     12         private $page;                            //当前页    
     13         private $config = array(
     14                 'head' => "条记录", 
     15                 'prev' => "上一页", 
     16                 'next' => "下一页", 
     17                 'first'=> "首页", 
     18                 'last' => "末页"
     19             );                     
     20         //在分页信息中显示内容,可以自己通过set()方法设置
     21         private $listNum = 10;                     //默认分页列表显示的个数
     22 
     23         /**
     24             构造方法,可以设置分页类的属性
     25             @param    int    $total        计算分页的总记录数
     26             @param    int    $listRows    可选的,设置每页需要显示的记录数,默认为25条
     27             @param    mixed    $query    可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
     28             @param     bool    $ord    可选的,默认值为true, 页面从第一页开始显示,false则为最后一页
     29          */
     30         public function __construct($total, $listRows=25, $query="", $ord=true){
     31             $this->total = $total;
     32             $this->listRows = $listRows;
     33             $this->uri = $this->getUri($query);
     34             $this->pageNum = ceil($this->total / $this->listRows);
     35             /*以下判断用来设置当前面*/
     36             if(!empty($_GET["page"])) {
     37                 $page = $_GET["page"];
     38             }else{
     39                 if($ord)
     40                     $page = 1;
     41                 else
     42                     $page = $this->pageNum;
     43             }
     44 
     45             if($total > 0) {
     46                 if(preg_match('/\D/', $page) ){
     47                     $this->page = 1;
     48                 }else{
     49                     $this->page = $page;
     50                 }
     51             }else{
     52                 $this->page = 0;
     53             }
     54             
     55             $this->limit = "LIMIT ".$this->setLimit();
     56         }
     57 
     58         /**
     59             用于设置显示分页的信息,可以进行连贯操作
     60             @param    string    $param    是成员属性数组config的下标
     61             @param    string    $value    用于设置config下标对应的元素值
     62             @return    object            返回本对象自己$this, 用于连惯操作
     63          */
     64         function set($param, $value){
     65             if(array_key_exists($param, $this->config)){
     66                 $this->config[$param] = $value;
     67             }
     68             return $this;
     69         }
     70         
     71         /* 不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值 */
     72         function __get($args){
     73             if($args == "limit" || $args == "page")
     74                 return $this->$args;
     75             else
     76                 return null;
     77         }
     78         
     79         /**
     80             按指定的格式输出分页
     81             @param    int    0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
     82             @return    string    分页信息内容
     83          */
     84         function fpage(){
     85             $arr = func_get_args();
     86 
     87             $html[0] = "<span class='p1'>&nbsp;共<b> {$this->total} </b>{$this->config["head"]}&nbsp;</span>";
     88             $html[1] = "&nbsp;本页 <b>".$this->disnum()."</b> 条&nbsp;";
     89             $html[2] = "&nbsp;本页从 <b>{$this->start()}-{$this->end()}</b> 条&nbsp;";
     90             $html[3] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;";
     91             $html[4] = $this->firstprev();
     92             $html[5] = $this->pageList();
     93             $html[6] = $this->nextlast();
     94             $html[7] = $this->goPage();
     95 
     96             $fpage = '<div style="font:12px \'\5B8B\4F53\',san-serif;">';
     97             if(count($arr) < 1)
     98                 $arr = array(0,1,2,3,4,5,6,7);
     99                 
    100             for($i = 0; $i < count($arr); $i++)
    101                 $fpage .= $html[$arr[$i]];
    102         
    103             $fpage .= '</div>';
    104             return $fpage;
    105         }
    106         
    107         /* 在对象内部使用的私有方法,*/
    108         private function setLimit(){
    109             if($this->page > 0)
    110                 return ($this->page-1)*$this->listRows.", {$this->listRows}";
    111             else
    112                 return 0;
    113         }
    114 
    115         /* 在对象内部使用的私有方法,用于自动获取访问的当前URL */
    116         private function getUri($query){    
    117             $request_uri = $_SERVER["REQUEST_URI"];    
    118             $url = strstr($request_uri,'?') ? $request_uri :  $request_uri.'?';
    119             
    120             if(is_array($query))
    121                 $url .= http_build_query($query);
    122             else if($query != "")
    123                 $url .= "&".trim($query, "?&");
    124         
    125             $arr = parse_url($url);
    126 
    127             if(isset($arr["query"])){
    128                 parse_str($arr["query"], $arrs);
    129                 unset($arrs["page"]);
    130                 $url = $arr["path"].'?'.http_build_query($arrs);
    131             }
    132             
    133             if(strstr($url, '?')) {
    134                 if(substr($url, -1)!='?')
    135                     $url = $url.'&';
    136             }else{
    137                 $url = $url.'?';
    138             }
    139             
    140             return $url;
    141         }
    142 
    143         /* 在对象内部使用的私有方法,用于获取当前页开始的记录数 */
    144         private function start(){
    145             if($this->total == 0)
    146                 return 0;
    147             else
    148                 return ($this->page-1) * $this->listRows+1;
    149         }
    150 
    151         /* 在对象内部使用的私有方法,用于获取当前页结束的记录数 */
    152         private function end(){
    153             return min($this->page * $this->listRows, $this->total);
    154         }
    155 
    156         /* 在对象内部使用的私有方法,用于获取上一页和首页的操作信息 */
    157         private function firstprev(){
    158             if($this->page > 1) {
    159                 $str = "&nbsp;<a href='{$this->uri}page=1'>{$this->config["first"]}</a>&nbsp;";
    160                 $str .= "<a href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a>&nbsp;";        
    161                 return $str;
    162             }
    163 
    164         }
    165     
    166         /* 在对象内部使用的私有方法,用于获取页数列表信息 */
    167         private function pageList(){
    168             $linkPage = "&nbsp;<b>";
    169             
    170             $inum = floor($this->listNum/2);
    171             /*当前页前面的列表 */
    172             for($i = $inum; $i >= 1; $i--){
    173                 $page = $this->page-$i;
    174 
    175                 if($page >= 1)
    176                     $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a>&nbsp;";
    177             }
    178             /*当前页的信息 */
    179             if($this->pageNum > 1)
    180                 $linkPage .= "<span style='padding:1px 2px;background:#BBB;color:white'>{$this->page}</span>&nbsp;";
    181             
    182             /*当前页后面的列表 */
    183             for($i=1; $i <= $inum; $i++){
    184                 $page = $this->page+$i;
    185                 if($page <= $this->pageNum)
    186                     $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a>&nbsp;";
    187                 else
    188                     break;
    189             }
    190             $linkPage .= '</b>';
    191             return $linkPage;
    192         }
    193 
    194         /* 在对象内部使用的私有方法,获取下一页和尾页的操作信息 */
    195         private function nextlast(){
    196             if($this->page != $this->pageNum) {
    197                 $str = "&nbsp;<a href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a>&nbsp;";
    198                 $str .= "&nbsp;<a href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a>&nbsp;";
    199                 return $str;
    200             }
    201         }
    202 
    203         /* 在对象内部使用的私有方法,用于显示和处理表单跳转页面 */
    204         private function goPage(){
    205                 if($this->pageNum > 1) {
    206                 return '&nbsp;<input style="width:20px;height:17px !important;height:18px;border:1px solid #CCCCCC;" type="text" οnkeydοwn="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'page=\'+page+\'\'}" value="'.$this->page.'"><input style="cursor:pointer;width:25px;height:18px;border:1px solid #CCCCCC;" type="button" value="GO" οnclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'page=\'+page+\'\'">&nbsp;';
    207             }
    208         }
    209 
    210         /* 在对象内部使用的私有方法,用于获取本页显示的记录条数 */
    211         private function disnum(){
    212             if($this->total > 0){
    213                 return $this->end()-$this->start()+1;
    214             }else{
    215                 return 0;
    216             }
    217         }
    218     }
    219 
    220     
    221     
    222     

     

    DBDA.php

     1 <?php 
     2 class DBDA
     3 {
     4     public $host="localhost";//服务器地址
     5     public $uid="root";//数据库的用户名
     6     public $pwd="123";// 数据库的密码
     7     //public $dbname="test2";
     8     //默认要操作的数据库
     9     //函数 1 代表查询  
    10     //执行sql语句,返回相应结果的函数
    11     //$sql是要执行的SQL语句
    12     //$type是SQL语句的类型,0代表增删改,1代表查询
    13     //$db代表要操作的数据库
    14     public function Query($sql,$type=1,$db="test2")
    15     {
    16         //造连接对象
    17         $conn=new mysqli($this->host,$this->uid,$this->pwd,$db);
    18 
    19         //判断连接是否成功
    20         !mysqli_connect_error()or die("连接失败!");
    21         //执行SQL语句
    22         $result=$conn->query($sql);
    23 
    24         //判断SQL语句类型
    25         if ($type=1) 
    26         {    //如果是查询语句返回结果集
    27             return $result->fetch_all();    
    28         }
    29         else
    30         {    //如果是其他语句,返回true或false
    31             return $result;
    32         }
    33     }
    34 
    35 }
    36  ?>

    test.php

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8 <table width=80% border="1" cellspacing="0" cellpadding="0">
     9 <tr>
    10     <td>地区代号</td>
    11     <td>地区名称</td>
    12     <td>地区父级代号</td>
    13 </tr>
    14 <?php 
    15 //加载类
    16 include("DBDA.php");
    17 //造连接对象
    18 $db=new DBDA();
    19 $sqlcount="select count(*)from ChinaStates";
    20 $attrs=$db->query($sqlcount);
    21 $total=$attrs[0][0];
    22 
    23 //加载类
    24 include("fpage.class.php");
    25 //造分页对象
    26 $page=new Page($total,20,"",true);
    27 //set函数
    28 $page->set('head','条数据');
    29 $page->set("prev","<img src='0063.png' width='15' height='15'>");
    30 $page->set('first','第一页');
    31 //显示
    32 $sql="select * from ChinaStates ".$page->limit;
    33 
    34 $attr=$db->query($sql);
    35 for ($i=0; $i <count($attr) ; $i++) 
    36 { 
    37     echo "<tr><td>{$attr[$i][0]}</td><td>{$attr[$i][1]}</td><td>{$attr[$i][2]}</td></tr>";
    38 }
    39 echo "<tr><td>{$page->fpage()}</td></tr>";
    40  ?>
    41 </table>
    42 <?php 
    43     
    44  ?>    
    45 </body>
    46 </html>

    显示:

    转载于:https://www.cnblogs.com/haodayikeshu/p/5327382.html

    展开全文
  • 3.末页时不包含后一页 4.也可以选择每一页要展示的数据条数 二 代码 1.先创建一个用来实现分页的实体类 package com.briup.model; import java.util.List; /** * 用来进行页面分页,切换页数的实体类 * ...

    一 最终效果展示

    1.数据从首页开始展示,所以没有前一页

    2.第二页时包含前一页和后一页

    3.末页时不包含后一页

    4.也可以选择每一页要展示的数据条数

    二 代码

    1.先创建一个用来实现分页的实体类

    package com.briup.model;
    
    import java.util.List;
    
    /**
     * 用来进行页面分页,切换页数的实体类
     * @author MECHREVO
     *
     */
    public class PageInfo<T> {
    	private int pageSize = 5; //每页显示的数据条数
    	private int total; //总记录数
    	private int currentPage = 1; //当前页码
    	private int pages; //总页数。
    	private int prePage; //前一页
    	private int nextPage; //后一页
    	private int firstPage = 1; //首页
    	private int lastPage;  //末页
    	private boolean hasPrePage; 
    	private boolean hasNextPage;
    	private List<T> datas; //当前页要显示的所有数据。
    	public PageInfo(int total,int pageSize,int currentPage,List<T> datas) {
    		this.total = total;
    		this.pageSize = pageSize;
    		this.currentPage = currentPage;
    		this.datas = datas;
    		//判断总页数,如果取余等于0则不加一,如果不等于则加一
    		this.pages = total%pageSize==0?total/pageSize:total/pageSize+1;
    		this.prePage = currentPage<=1?currentPage:currentPage-1;
    		this.nextPage = currentPage>=pages?currentPage:currentPage+1;
    		this.lastPage = pages;
    		this.hasNextPage = currentPage<pages;
    		this.hasPrePage = currentPage>1;
    		
    	}
    	public int getPageSize() {
    		return pageSize;
    	}
    	public int getTotal() {
    		return total;
    	}
    	public int getCurrentPage() {
    		return currentPage;
    	}
    	public int getPages() {
    		return pages;
    	}
    	public int getPrePage() {
    		return prePage;
    	}
    	public int getNextPage() {
    		return nextPage;
    	}
    	public int getFirstPage() {
    		return firstPage;
    	}
    	public int getLastPage() {
    		return lastPage;
    	}
    	public boolean isHasPrePage() {
    		return hasPrePage;
    	}
    	public boolean isHasNextPage() {
    		return hasNextPage;
    	}
    	public List<T> getDatas() {
    		return datas;
    	}
    }
    

    2.展示信息的jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <!-- base设置文件相对的路径,可以避免页面跳转找不到的错误 -->
    <base href="${pageContext.request.contextPath}/">
    <title>区域信息管理</title>
    <link style="text/css" rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <div class="main">
            <div class="head">
                <h1>企业信息管理系统</h1>
            </div>
            <div class="content">
                <div class="left">
                    <ul>
                        <li><a href="region/allregion.do">区域信息管理</a></li>
                        <li><a href="depart/depart.html">部门信息管理</a></li>
                        <li><a href="emp/emp.html">员工信息管理</a></li>
                    </ul>
                </div>
                <div class="rigth">
                  <div class = "search">
                   <span>
                    <input type="text" placeholder="请输入区域名称">
                    <button>检索</button>
                    <button onclick="javascript:window.location.href='region/addRegion.html'">添加</button>
                   </span>
                  </div>
                    <table>
                        <thead>
                            <tr>
                                <th>区域编号</th>
                                <th>区域名称</th>
                                <th>操作</th>
                            </tr>
                        </thead>
                        <tbody>
                            <c:forEach var="region" items="${requestScope.pageInfo.datas }" varStatus="s">
                                <c:if test="${(s.index+1)%2==0 }">
                                <tr class="odd">
                                </c:if>
                                <c:if test="${(s.index+1)%2!=0 }">
                                <tr>
                                </c:if>
                                    <td>${region.id }</td>
                                    <td>${region.name }</td>
                                    <td><button>编辑</button> <button>删除</button></td>
                                </tr>
                            </c:forEach>
                        </tbody>
                        <tfoot>
                            <tr>
                                <td colspan="3" align="right">
                                    <select name="pageSize" onchange="changeSize(this.value)">
                                        <option value="5">5</option>
                                        <option value="10">10</option>
                                        <option value="15">15</option>
                                        <option value="20">20</option>
                                    </select>
                                    <!-- 设置后用于更改默认的展示条数 -->
                                    <script type="text/javascript">
                                        pageSize = ${pageInfo.pageSize};
                                        options = document.getElementsByTagName("option");
                                        for(var i=0;i<options.length;i++){
                                        	if(options[i].value==pageSize){
                                        		options[i].selected='selected';
                                        	}
                                        }
                                    </script>
                                    <span><a href="region/allregion.do?currentPage=1&pageSize=${pageInfo.pageSize }">首 页</a></span>
                                    <!-- 判断有没有前一页 -->
                                    <c:if test="${ pageInfo.hasPrePage}">
                                        <span><a href="region/allregion.do?currentPage=${pageInfo.prePage }&pageSize=${pageInfo.pageSize }">前一页</a></span>
                                    </c:if>
                                    <!-- 判断有没有后一页 -->
                                    <c:if test="${pageInfo.hasNextPage}">
                                        <span><a href="region/allregion.do?currentPage=${pageInfo.nextPage }&pageSize=${pageInfo.pageSize }">后一页</a></span>
                                    </c:if>
                                    <span><a href="region/allregion.do?currentPage=${pageInfo.pages }&pageSize=${pageInfo.pageSize }">末 页</a></span>
                                    共${pageInfo.total }条记录${pageInfo.pages }页
                                </td>
                            </tr>
                        </tfoot>
                    </table>
                </div>
            </div>
            <div style="clear: both;"></div>
            <div class="footer">
                本系统最终解释权为我所有。
            </div>
        </div>
    </body>
    <script type="text/javascript">
        function changeSize(pageSize){
        	window.location.href="allregion.do?pageSize="+pageSize
        }
    </script>
    </html>

    3.创建一个java类,书写SQL语句实现查询

    package com.briup.dao.impl;
    
    import java.math.BigDecimal;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    
    import com.briup.common.util.DBUtils;
    import com.briup.dao.IRegionDao;
    import com.briup.model.Region;
    
    public class RegionDaoImpl implements IRegionDao{
    	QueryRunner qr = new QueryRunner();
    	//查询数据总数
    	public int count() {
    		try(Connection conn = DBUtils.getConnection();) {
    			return qr.query(conn, "select count(*) from s_region",
    					new ScalarHandler<BigDecimal>(1)).intValue();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		}	
    	}
    	public List<Region> findByPage(int currentPage,int pageSize){
    		//分页代码的核心SQL语句利伪列rownum来实现
    		try(Connection conn = DBUtils.getConnection();) {
    			List<Region> list = qr.query(conn, "select id,name from "
    					+"(select id,name,rownum r "
    					+"from s_region) region "
    					+"where r between ? and ?",
    			new BeanListHandler<Region>(Region.class),
    			(currentPage-1)*pageSize+1,currentPage*pageSize);
    			System.out.println("list:"+list);
    			return list;
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		}	
    	}
    }
    

    4.创建一个类调用上面的方法来产生一个分页的实体对象

    package com.briup.service.impl;
    
    import java.util.List;
    
    import com.briup.common.util.BeanFactory;
    import com.briup.dao.IRegionDao;
    import com.briup.model.PageInfo;
    import com.briup.model.Region;
    import com.briup.service.IRegionService;
    
    public class RegionServiceImpl implements IRegionService{
    	IRegionDao dao = (IRegionDao) BeanFactory.getBean(BeanFactory.GERION_DAO);
    	public PageInfo<Region> findByPage(int currentPage,int pageSize){
    		int total = dao.count();
    		List<Region> list = dao.findByPage(currentPage, pageSize);
    		System.out.println("------------------"+list);
    		return new PageInfo<Region>(total, pageSize, currentPage, list);
    	}
    }
    

    5.写一个servlet实现页面信息的分页展示

    package com.briup.web.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    import com.briup.common.util.BeanFactory;
    import com.briup.model.PageInfo;
    import com.briup.model.Region;
    import com.briup.service.IRegionService;
    //多一个region/,是为了后面可以过滤region/*
    @WebServlet("/region/allregion.do")
    public class AllRegionServlet2 extends HttpServlet{
    	private static final long serialVersionUID = 1L;
    	IRegionService service = (IRegionService) BeanFactory.getBean(BeanFactory.GERION_SERVICE);
    	
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		String pageSizeStr = req.getParameter("pageSize");
    		String currentPageStr = req.getParameter("currentPage");
    		//先给一个默认值,用来定义第一次加载显示的标准
    		int pageSize = 5;
    		int currentPage = 1;
    		//判断不为null 或者 去首尾空格后不为""
    		if(pageSizeStr!=null && !"".equals(pageSizeStr.trim())) {
    			pageSize = Integer.parseInt(pageSizeStr);
    		}
    		if(currentPageStr!=null && !"".equals(currentPageStr.trim())) {
    			currentPage = Integer.parseInt(currentPageStr);
    		}
    		
    		
    		try {
    			PageInfo<Region> pageInfo = service.findByPage(currentPage, pageSize);
    			req.setAttribute("pageInfo", pageInfo);
    			req.getRequestDispatcher("/region/region.jsp").forward(req, resp);;
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(req, resp);
    	}
    
    }
    

    6.上面用到的接口和产生对象的java类

    package com.briup.dao;
    
    import java.util.List;
    
    import com.briup.model.Region;
    
    public interface IRegionDao {
    	int count();
    	List<Region> findByPage(int currentPage,int pageSize);
    }
    
    package com.briup.service;
    
    import com.briup.model.PageInfo;
    import com.briup.model.Region;
    
    public interface IRegionService {
    	PageInfo<Region> findByPage(int currentPage,int pageSize);
    }
    

    产生对象的类,作用是用来解耦合

    1.先写一个bean.properties文件用来保存要产生对象的权限类名

    regionDao=com.briup.dao.impl.RegionDaoImpl
    regionService=com.briup.service.impl.RegionServiceImpl

    2.写一个java类来解析这个文件,并产生对应的对象

    package com.briup.common.util;
    
    import java.io.IOException;
    import java.util.Properties;
    
    public class BeanFactory {
    	public final static String GERION_DAO = "regionDao";
    	public final static String GERION_SERVICE = "regionService";
    	private static Properties props = new Properties();
    	static {
    		try {
    			props.load(BeanFactory.class.getResourceAsStream("/bean.properties"));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		}
    	}
    	
    	public static Object getBean(String name) {
    		/*if(name.equals(GERION_DAO)) {
    			return new RegionDaoImpl();
    		}else if(name.equals(GERION_SERVICE)){
    			return new RegionServiceImpl();
    		}else {
    			return null;
    		}*/
    		String clsName = props.getProperty(name);
    		try {
    			return Class.forName(clsName).newInstance();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		}
    		
    	}
    }
    

     

     

    展开全文
  • phpcms\modules\wap\functions\global....在 global.func.php 文件中对应的函数为:wpa_pagesfunction wpa_pages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$setpages = 10) { if(defined('

    phpcms\modules\wap\functions\global.func.php
    在 global.func.php 文件中对应的函数为:wpa_pages

    function wpa_pages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$setpages = 10) {
        if(defined('URLRULE')) {
            $urlrule = URLRULE;
            $array = $GLOBALS['URL_ARRAY'];
        } elseif($urlrule == '') {
            $urlrule = url_par('page={$page}');
        }
        $multipage = '';
        if($num > $perpage) {
            $page = $setpages+1;
            $offset = ceil($setpages/2-1);
            $pages = ceil($num / $perpage);
            if (defined('IN_ADMIN') && !defined('PAGES')) define('PAGES', $pages);
            $from = $curr_page - $offset;
            $to = $curr_page + $offset;
            $more = 0;
            if($page >= $pages) {
                $from = 2;
                $to = $pages-1;
            } else {
                if($from <= 1) {
                    $to = $page-1;
                    $from = 2;
                }  elseif($to >= $pages) { 
                    $from = $pages-($page-2);  
                    $to = $pages-1;  
                }
                $more = 1;
            } 
            $multipage .= $curr_page.'/'.$pages;
            if($curr_page>0) {
                if($curr_page == '1'){
                    $multipage .= ' <a href="'.pageurl($urlrule, $curr_page-1, $array).'">首页</a>';
                }else{
                    $multipage .= ' <a href="'.pageurl($urlrule, $curr_page-1, $array).'">'.L('previous').'</a>';
                }
            }
            if($curr_page==$pages) {
                $multipage .= ' <a href="'.pageurl($urlrule, $curr_page, $array).'">末页</a>';
            } else {
                $multipage .= ' <a href="'.pageurl($urlrule, $curr_page+1, $array).'">'.L('next').'</a>';
            }
    
        }
        return $multipage;
    }
    展开全文
  • 当前其github主页的star数量为49.2k,比另一个流行的打包工具parcel(31.9k)要高不少。本人(小白一枚)由于项目需要的原因,最近几个月断断续续学习和使用webpack进行多页面工程的打包,可以说是一路挖坑一路填坑...

    1. 背景

    Webpack是当下使用人数最多的网页打包工具。当前其github主页的star数量为49.2k,比另一个流行的打包工具parcel(31.9k)要高不少。本人(小白一枚)由于项目需要的原因,最近几个月断断续续学习和使用webpack进行多页面工程的打包,可以说是一路挖坑一路填坑,最终实现了令人满意的效果。本文将回顾一路以来遇到的主要问题,简单分析并着重给出解决方案,主要包括:

    1. html、js、css和图片的打包、压缩方法
    2. 多页面入口的正确打包结构及注意事项
    3. 多页面入口babel/polyfill引用方式
    4. 开发与调试配置文件差异

    我希望给遇到同样问题的读者一些技术上的建议和帮助,从而少走弯路。文末会给出配置文件的完整代码,请读者耐心阅读,也希望指出笔者存在的问题,提出宝贵的建议。下面我将循序渐进地分享我的经验。😉

    2. 什么是Webpack?

    随着ECMAScript的版本不断迭代,node.js的不断推广,大页面被切分为小模块,一个js文件引用了多个js文件,很多的开源js库也可以通过下载,被引用到自己的工程中。这样的作法是有利于开发者的:将功能一致的代码提取到独立的文件中,既减少了每个文件的体积,降低开发难度,提高代码组织清晰度,又提高了代码的复用性。但是这么深的文件结构以及无数的小文件并不利于浏览器加载,因此,将多个模块和依赖合并为一个文件,简化网页工程的结构,这是webpack的基本能力。

    在此基础之上,结合编译和压缩相关的库,webpack还可以编译js文件以及压缩网页、脚本、样式以及图片文件。从而得到浏览器可以直接使用的打包后的工程。
    webpack官网首页

    3. 基本安装

    在确保node.js安装好的前提下,首先创建项目目录文件夹webpack-demo

    mkdir webpack-demo && cd webpack-demo
    

    安装webpack4.0以上版本,安装完成后,当前目录下会出现node_modules文件夹和package-lock.json。

    npm install --save-dev webpack webpack-cli
    

    创建和初始化package.json文件

    npm init -y
    

    初始化后的package.json文件结构如下:

    {
      "name": "webpack-demo",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "dependencies": {
        "webpack-cli": "^3.3.2",
        "webpack": "^4.33.0"
      },
      "devDependencies": {},
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    

    这里我给这个json添加以下代码,防止意外发布私有库:

    {
    ...
    "private":true,
    ...
    }
    

    对于package.json的详细介绍可以参考这篇文章mujiang.info
    这样,webpack环境就基本配好。接下来我直接介绍多文件打包的流程。👽

    4. 多文件基本结构

    |–node_modules
    package.json
    package-lock.json
    |–dist
       |–img
       |–css
       |–js
       index.html
       second.html
    |–src
       |–img
       |–css
       |–js
       index.html
       second.html

    PS:/dist:打包后的文件夹; /src:打包前的文件夹

    该文件目录只是多文件结构的一种,当然也可以一个页面做一个文件夹,然后下面包含/img、/css等资源文件。本文以该结构进行讲解。

    5. 打包配置文件

    5.1. 创建配置文件

    打包配置文件是webpack的特点之一,webpack根据配置文件的设定对文件夹进行打包。通常我们会在根目录直接创建一个名为webpack.config.js的配置文件,这也是webpack默认的配置文件位置。但是其实是可以灵活调整的。这里我直接创建两个配置文件,一个用于调试(webpack.config.dev.js),一个用于发布(webpack.config.build.js)。

    我在根目录创建一个名为config的文件夹,然后创建上述两个配置文件,文件结构变为:

    |–config
       webpack.config.dev.js
       webpack.config.build.js

    我先对用于开发的配置文件进行介绍。

    5.2. webpack.config.dev.js配置文件

    基本内容如下:

    const webpack = require('webpack');
    const path = require('path');
    
    module.exports = {
    	mode:"development",
    	entry:{...},
    	output:{...},
    	module:{...},
    	plugins:[...],
    	...
    }
    

    各参数含义如下表:

    参数含义
    mode可以选"development"或"production",前者表示开发模式,不压缩;后者表示生产模式,会对js文件进行压缩。
    entry打包入口,通常为某个js文件
    output打包输出路径
    module打包规则,不同后缀的文件用不同的包来处理
    plugins实现一些功能用到的插件

    下面对各参数详细讲解。

    5.2.1. entry

    entry可以定义多个入口,格式如下:

    entry:{
    	name1:'./src/js/name1.js',
    	name2:'./src/js/name2.js',
    	...
    }
    

    PS:name1为别名,‘src/js/name1.js’为入口js文件的路径,该路径是以根目录为当前目录,注意’src’前面不能少掉’./’,否则打包会报错找不到该文件。

    对于上述文件结构,每个html都会对应一个js入口文件,比如index.html引用了index.js,first.js作为入口引用了其他的文件。同理,second.html引用了second.js作为入口文件,那么entry可以写为:

    entry:{
    	index:'./src/js/first.js',
    	second:'./src/js/second.js',
    }
    

    这样就会打包这两个js。

    5.2.2. output

    output基本设置如下:

    output: {
    	filename: 'js/[name].js',
    	path: path.resolve(__dirname, '../dist'),
    }
    

    PS:需要注意的地方有两点

    1. path的当前目录是webpack.config.js的当前目录,即/config,而/dist与/config是平行关系,因此写的是’…/dist’。
    2. filename是打包后的文件名,是相对于path。name是entry中的别名,'js/[name].js’表明打包后的位置是/dist/js/[name].js。
    5.2.3. module

    module基本结构如下:

    module:{
    	rules:[
    		{
    			test:正则表达式,
    			use:[对应的loader]
    		}
    	]
    }
    

    module的作用是匹配不同类型的文件,用不同的包进行处理和解析。这里就涉及到文件的压缩问题。html、js、css和图片的打包策略都不同,我将在后面的章节中详细介绍。

    5.2.4. plugins

    plugins是为了更方便打包,实现了某些功能的接口。我将在后面实现具体功能时穿插plugins的配置方法。

    5.3. webpack.config.build.js配置文件

    发布的版本和调试用的版本有很大的区别,主要差异在于文件的体积小很多。这里就引出第六章压缩文件的话题。

    6. 压缩文件

    网页是由许许多多资源文件组成的,包括网页文件(.html)、脚本文件(.js)、样式文件(.css)、以及图片文件(.jpg、.png)等等。当浏览器打开这些网页时,本质上是从服务器上下载这些资源文件到浏览器上,再通过浏览器对这些文件进行解析,渲染成我们所看到的各式各样的网页。既然是从服务器上下载,在不影响效果的前提下,我们都希望文件越小越好,因为这样下载的时间更短,用户体验就会提高。压缩文件的方式最简单的就是将文件中的换行和空格去掉,而压缩不同类型的文件用到的库页不同,下面介绍对于四种资源文件的压缩打包配置方式。

    6.1. 压缩html

    通常打包的js,与html是没有对应关系的,即独立打包,之后在html中对打包后的js进行引用。但其实通过插件,html和js是可以联系起来的。这里用到了html-webpack-plugin包,安装方式如下:

    npm install --save-dev html-webpack-plugin
    

    安装后,在plugins中进行配置:

    const htmlPlugin = require('html-webpack-plugin');
    ...
    plugins:[
    	new htmlPlugin({
        	filename:'index.html',//打包后的文件名
    		minify:{//对html文件进行压缩
    	        removeAttributeQuotes:true, //去掉属性的双引号
    	        removeComments: true,//去掉注释
    	        collapseWhitespace: true,//去掉空白
    	    },
       		chunks:['index'],//每个html只引入对应的js和css
       		inject:true,
    	    hash:true, //避免缓存js。
    	    template:'./src/index.html' //打包html模版的路径和文件名称
    	}),
    	new htmlPlugin({
    		filename:'second.html',
    		minify:{...},
       		chunks:['second'],
       		inject:true,
    	    hash:true, 
    	    template:'./src/second.html'
    	}),
    	...
    ]
    

    PS:关键的几个属性

    1. template:选择要打包的html路径,以根目录为当前目录
    2. chunks:写entry中的入口名称,即对应的js
    3. minify:压缩配置

    根据上述配置,可以进行多个页面(html)的匹配(与js)和压缩。

    6.2. 压缩图片

    图片压缩分为两类,一类是在html中的图片,另一类是在js或者css中的图片。

    需要下载两个库url-loaderhtml-withimg-loader,安装方式如下:

    npm install --save-dev url-loader html-withimg-loader
    

    在module中的配置如下:

    module:{
    	rules:[
    		{//压缩css和js中的图片
    			test:/\.(png|jpg|gif|jpeg)/,//匹配图片文件后缀名
    			use:[{
            		loader:'url-loader',//指定使用的loader和loader的配置参数
            		options:{
                		limit:5*1024,//是把小于5KB的文件打成Base64的格式,写入JS
                		outputPath:'./img/',//打包后的图片放到img文件夹下
                	}
                }]
            },
            {//html配置
            	test: /\.(htm|html)$/i,
            	use:[ 'html-withimg-loader']
            },
            ...
    	]
    }
    

    6.3. 提取和压缩css

    css的提取和压缩实际上用到了不同的包,前者用到extract-text-webpack-pluginstyle-loadercss-loader,后者用到optimize-css-assets-webpack-plugincssnanopostcss-safe-parser,安装方法如下:

    npm install --save-dev extract-text-webpack-plugin style-loader css-loader optimize-css-assets-webpack-plugin cssnano postcss-safe-parser
    

    配置方法如下:

    const extractTextPlugin = require('extract-text-webpack-plugin');
    const indexExtractCss = new extractTextPlugin('css/[name].css');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    ...
    module:{
    	rules:[
    	{
    		test:/src(\\|\/)css(\\|\/).*\.(css)$/,
    		use:indexExtractCss.extract({
    			fallback:"style-loader",
    			use:[
    			{
    				loader:"css-loader",
    				options:{
    					// importLoaders:1
    					// minimize:true
    				}					
    			},
    			]
    		})
    	},
    	...
    	]
    },
    plugins:[
    indexExtractCss,
    new OptimizeCSSAssetsPlugin({//压缩css
        assetNameRegExp: /(?:first|second)\.css/g,  //需要根据自己打包出来的文件名来写正则匹配,这个配置是我自己的
        cssProcessor: require('cssnano'),
        cssProcessorOptions: {
        	discardComments: { removeAll: true },
        	parser: require('postcss-safe-parser'),
        	autoprefixer: false
        },
        canPrint: true
    }),
    ]
    

    6.4. 压缩和编译js

    webpack高版本对于js的压缩其实非常简单,只需要将配置文件中的mode改为"production"即可。

    js的编译则需要引入babel,为了使用ecmascript最新的标准,需要引入babel/polyfill。安装如下:

    npm install --save-dev @babel/core @babel/polyfill @babel/preset-env babel-loader
    

    使用也很容易,配置如下:

    entry:{
    	index:['@babel/polyfill','./src/js/first.js'],
    	second:['@babel/polyfill','./src/js/second.js'],
    },
    module:{
    	rules:[
    		{
    			test:/\.js$/,
    			exclude: /node_modules/,//排除node_modules文件夹下的js
    			loader:'babel-loader',
    		}
    	]
    },
    ...
    

    另外,在每个入口文件的文件头,引用polyfill。以first.js为例,如下所示:

    import'@babel/polyfill';
    ...
    

    这样就可以使用最新的API来写js代码了。👍

    7. webpack打包路径问题

    css中引用的img,打包后的图像路径是相对于css文件,而js或html中引用的img,打包后是相对于html的路径。为了使得打包后的图像统一放在文件夹dist/img/下,使用publicPath参数。

    配置方法:

    output:{
    	...
    	publicPath:'/'
    },
    ...
    

    这样的效果是将所有打包后的相对路径都替换为绝对路径/,这样无论之后发布的ip和端口怎么变,只要dist是根目录,引用就没问题。当然,如果已知ip和端口不变,也可以直接设置publicPath为’http://ip:port/’,只是这样不够灵活。

    8. 网页调试

    webpack可以很方便的实时打包和调试,需要安装webpack-dev-server,安装方式如下:

    npm install --save-dev webpack-dev-server
    

    在package.json中添加:

    "scripts":{
    	"server": "webpack-dev-server --open --hot --config=config/webpack.config.dev.js"
    }
    

    然后在webpack.config.dev.js中配置:

    module.exports = {
    	...
    	devServer:{
    		contentBase:path.resolve(__dirname,'../dist'),//设置基本目录结构,相对当前文件的路径
        	host:'localhost',//服务器的IP地址,这里先使用loaclhost地址
        	compress:true,//服务端压缩是否开启
        	port:'8888', //配置服务端口号
        },
    }
    

    运行

    npm run server
    

    就会自动在浏览器中打开网页,并且修改js文件会自动刷新网页。💚

    9. 附件

    9.1. webpack.config.dev.js

    const webpack = require('webpack');
    const path = require('path');
    const htmlPlugin = require('html-webpack-plugin');
    const extractTextPlugin = require('extract-text-webpack-plugin');
    const indexExtractCss = new extractTextPlugin('css/[name].css');
    
    var website = {
    	publicPath:"http://localhost:8888/" //调试
    }
    
    module.exports = {
    	mode: "development",//development or production
    	entry:{
    		index:['@babel/polyfill','./src/js/first.js'],
    		second:['@babel/polyfill','./src/js/second.js'],
    	},
    	output: {
    		filename: 'js/[name].js',
    		path: path.resolve(__dirname, '../dist'),
    		publicPath:website.publicPath
    	},
    	module:{
    		rules:[
    		{
    			test:/\.js$/,
    			exclude: /node_modules/,
    			loader:'babel-loader',
    		},
    		{
    			test:/\.(css)$/,
    			use:indexExtractCss.extract({
    				fallback:"style-loader",
    				use:[
    				{
    					loader:"css-loader",				
    				},
    				]
    			})
    		},
    		{
    			test:/\.(png|jpg|gif|jpeg)/, //是匹配图片文件后缀名
    			use:[{
            		loader:'url-loader', //指定使用的loader和loader的配置参数
            		options:{
                		limit:5*1024,  //是把小于5KB的文件打成Base64的格式,写入JS
                		outputPath:'./img/'  //打包后的图片放到img文件夹下
                	}
                }]
            },
            {
            	test: /\.(htm|html)$/i,
            	use:[ 'html-withimg-loader']
            }
            ]
        },
        plugins:[
        new htmlPlugin({
        	filename:'index.html',
    		minify:{//对html文件进行压缩
    	        removeAttributeQuotes:true, //removeAttrubuteQuotes是去掉属性的双引号。
    	    },
       		chunks:['index'],//每个html只引入对应的js和css
       		inject:true,
    	    hash:true, //为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS。
    	    template:'./src/index.html' //打包html模版的路径和文件名称。
    	}),
        new htmlPlugin({
        	filename:'second.html',
    		minify:{//对html文件进行压缩
    	        removeAttributeQuotes:true, //removeAttrubuteQuotes是去掉属性的双引号。
    	    },
    	    chunks:['second'],
    	    inject:true,
    	    hash:true, //为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS。
    	    template:'./src/second.html' //打包html模版的路径和文件名称。
    	}),
        indexExtractCss,//提取css
        ],
        devServer:{
    		contentBase:path.resolve(__dirname,'../dist'),//设置基本目录结构
        	host:'localhost',//服务器的IP地址,这里先使用loaclhost地址
        	compress:true,//服务端压缩是否开启
        	port:'8888', //配置服务端口号
        },
    };
    

    9.2. webpack.config.build.js

    const webpack = require('webpack');
    const path = require('path');
    const htmlPlugin = require('html-webpack-plugin');
    const extractTextPlugin = require('extract-text-webpack-plugin');
    const indexExtractCss = new extractTextPlugin('css/[name].css');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    var website = {
    	publicPath:"/" 
    }
    
    module.exports = {
    	mode: "production",//development or production
    	entry:{
    		index:['@babel/polyfill','./src/js/first.js'],
    		second:['@babel/polyfill','./src/js/second.js'],
    	},
    	output: {
    		filename: 'js/[name].js',
    		path: path.resolve(__dirname, '../dist'),
    		publicPath:website.publicPath
    	},
    	module:{
    		rules:[
    		{
    			test:/\.js$/,
    			exclude: /node_modules/,
    			loader:'babel-loader',
    		},
    		{
    			test:/\.(css)$/,
    			use:indexExtractCss.extract({
    				fallback:"style-loader",
    				use:[
    				{
    					loader:"css-loader",				
    				},
    				]
    			})
    		},
    		{
    			test:/\.(png|jpg|gif|jpeg)/, //是匹配图片文件后缀名
    			use:[{
            		loader:'url-loader', //指定使用的loader和loader的配置参数
            		options:{
                		limit:5*1024,  //是把小于5KB的文件打成Base64的格式,写入JS
                		outputPath:'./img/'  //打包后的图片放到img文件夹下
                	}
                }]
            },
            {
            	test: /\.(htm|html)$/i,
            	use:[ 'html-withimg-loader']
            }
            ]
        },
        plugins:[
        new htmlPlugin({
        	filename:'index.html',
    		minify:{//对html文件进行压缩
    	        removeAttributeQuotes:true, //removeAttrubuteQuotes是去掉属性的双引号。
    	    },
       		chunks:['index'],//每个html只引入对应的js和css
       		inject:true,
    	    hash:true, //为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS。
    	    template:'./src/index.html' //打包html模版的路径和文件名称。
    	}),
        new htmlPlugin({
        	filename:'second.html',
    		minify:{//对html文件进行压缩
    	        removeAttributeQuotes:true, //removeAttrubuteQuotes是去掉属性的双引号。
    	    },
    	    chunks:['second'],
    	    inject:true,
    	    hash:true, //为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS。
    	    template:'./src/second.html' //打包html模版的路径和文件名称。
    	}),
        indexExtractCss,//提取css
        new OptimizeCSSAssetsPlugin({//压缩css
            assetNameRegExp: /(?:index|second)\.css/g,  //需要根据自己打包出来的文件名来写正则匹配这个配置是我自己的
            cssProcessor: require('cssnano'),
            cssProcessorOptions: {
            	discardComments: { removeAll: true },
            	parser: require('postcss-safe-parser'),
            	autoprefixer: false
            },
            canPrint: true
        }),
        ],
    };
    

    9.3. package.json

    {
      "name": "webpack-demo",
      "version": "1.0.0",
      "description": "",
      "private": true,
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "watch": "webpack --watch",
        "build": "webpack --config=config/webpack.config.build.js",
        "server": "webpack-dev-server --open --hot --config=config/webpack.config.dev.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "@babel/core": "^7.4.3",
        "@babel/polyfill": "^7.4.3",
        "@babel/preset-env": "^7.4.3",
        "babel-loader": "^8.0.5",
        "css-loader": "^2.1.1",
        "cssnano": "^4.1.10",
        "extract-text-webpack-plugin": "^4.0.0-beta.0",
        "file-loader": "^3.0.1",
        "html-webpack-plugin": "^3.2.0",
        "html-withimg-loader": "^0.1.16",
        "optimize-css-assets-webpack-plugin": "^5.0.0",
        "postcss-safe-parser": "^4.0.1",
        "style-loader": "^0.23.1",
        "url-loader": "^1.1.2",
        "vue-multiselect": "^2.1.4",
        "webpack": "^4.30.0",
        "webpack-cli": "^3.3.1",
        "webpack-dev-server": "^3.3.1"
      },
      "dependencies": {}
    }
    

    9.4. 打包和调试命令

    打包运行

    npm run build
    

    调试运行

    npm run server
    

    10. 结束语

    好久没有写这么长的博文了,写完后只有两个字“舒服”。本文是笔者个人学习和实践所得,如需转载,请注明出处,谢谢!🌱

    展开全文
  • Auto.js Pro 调起APP并跳转至指定页面

    万次阅读 2021-03-07 13:26:30
    联系方式及demo下载见文 效果: 环境: VS Code Auto.js Pro 7.0.4 雷电4 模拟器 跳转 function openjd() { app.startAcvity({ packageName: '包名', action:"VIEW" }); }; openjd(); 本文仅供...
  • 当然也可以用其他评论插件,只需要配置对应项就是了,不是自带的可以照着网上的教程自己弄一个,类似的文章有很多,可以搜索关键字就行了。 2.3 添加网易云音乐BGM 写文章的时候,想插入一段 BGM 怎么办? ...
  • java中对list进行分页显示数据到页面

    万次阅读 2017-07-27 17:35:51
    有时候需要根据条件查询得出的数据较多,需要分页显示到页面上。...可以在list中进行分页。page的model类:public class Page { ...//当前 private int pageSize;//每显示记录条数 private int totalPage;
  • WindowsXP相关设置对应的注册表位置

    千次阅读 2015-10-11 16:58:29
    以下为 XP相应设置对应的注册表位置(不含针对文件夹位置和用户名等与个人计算机相关的设置项),不能直接复制导入注册表(因为省略了很多东西),如有需要,可下载完整的此注册表文件,可以直接使用,在XP SP2版中...
  • Selenium 3.0,这个版本是在2016年发布的大版本。它带来的主要变化是引入Webdriver API的W3C规范,用于浏览器自动化。也就是说,每个主要的浏览器都会有自己的Webdriver API来实现功能。 问题2:你如何从命令行...
  • 1.对象的反射:通过对象找出该类中所有的方法 Class cla=this.getClass(); Method method=cla.getDeclaredMethod(methodName,HttpServletRequest.... 例子:通过参数能调用该类中参数所对应的方法  超链接请求,
  • 毕业论文往往篇幅较长,同时对于格式有着很多要求,特别是其中对页眉页码的要求,编辑起来较为麻烦,博主刚写...同时章节末对应的偶数不显示页眉和页码的这个操作,这里对论文页眉页码常见问题及解决方案进行了梳理。
  • 首页是整个应用里边交互最为复杂的一个页面了,它集合了各种滑动方式,包括:纵向滑动、横向滑动、嵌套滑动;同时,也集合了各种动效,包括:下拉刷新、上拉加载、头图视差、二级吸顶、回到顶部、横向Banner和纵向...
  • //首页末页的没有写上,看懂这个你肯定也会首页末页的了 body部分 <!--下面标签的class对应上面的--> <!--这是首页导航--> <span aria-hidden="true">« <!--这是1-...
  • 之前也学过分,但是那都是别人写好的,直接复制;虽有人家写好的论坛项目源码,但是分页却是自己写的,看着觉得别扭,我突然想用pagehelper能不能也实现这样的功能呢?于是在自己一番大量翻车的摸索下,终于成功了...
  • Linux实用教程(第三版)

    万次阅读 多人点赞 2019-08-27 22:55:59
    2.3注销、关闭和重启Linux系统 2.4 FirewallD防火墙 第三章 字符界面操作基础 本章内容 字符界面简介 在Linux系统下获取帮助 Shell基础知识 3.4使用bash 3.5Shell实用功能 3.6重定向 3.7 vi编辑器 命令模式命令 行...
  •  full_numbers - 除首页、上一页、下一页、末页四个按钮还有页数按钮  下面展示了full_numbers类型的分页 */  $('#table_report').DataTable( {  "pagingType": "full_numbers"  } ); }); ...
  • 相关内容有兴趣的可以再去多了解一些,文我也会贴出一些我查找过程中的一些链接。 本次多进程采用的是Python中的multiprocessing模块中的Process类。根据上面讲到的内容,因为涉及到我们自己需要设计的部分,所以...
  • 1.对象的反射:通过对象找出该类中所有的方法 Class cla=this.getClass(); Method method=cla.getDeclaredMethod(methodName,HttpServletRequest.... 例子:通过参数能调用该类中参数所对应的方法 超链接请求...
  • 在项目中由于特殊需要,每显示的数据条数是不一样的,如第一显示的是10条数据,那么第二有可能显示的就是20天,第三显示的就是13条,由于传统的bootstraptable每显示的是固定页数的值,所以无法实现这个...
  • 解析器 Compile:解析 Vue 模板指令,将模板中的变量都替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,调用更新函数进行数据更新。...
  • uniapp:tabBar页面如何跳转?

    千次阅读 2021-04-24 10:37:18
    "pagePath": "pages/rate/rate", "text": "评价" } ] } 那么对应的4个页面就都会出现tabBar,如果想要通过代码跳转到这几个页面,比如进入到某个子页面后,想返回到首页,需要使用switchTab goToHome...
  • 注:所有参考文档均附在文 背景 公司的cms产品,最近正在做功能迁移,而我正好负责将老后台的文章发布功能迁移到新后台。 文章发布的核心技术是页面静态化。定稿的文章,发布的时候,会生成对应的静态页面,并将...
  • php实现新闻页面

    2016-04-29 14:26:00
    首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="jquery-1.11.2.min.js"></script&g...
  • 黑马旅游网_前端页面总结

    千次阅读 2019-05-28 11:46:59
    var lastPage = '('+cid+','+pb.totalPage+',\''+rname+'\') "class="threeword">(0)">末页</a></li>'; var lis = firstPage + beforePage; /* 1.一共展示10个页码,能够达到前5后4的效果 2.如果前边不够5个,...
  • ssm——整合,前端页面设计,分页

    千次阅读 2018-11-29 14:48:35
    1.创建mave项目 1.先创建一个maven项目,创建完成之后, 右单击项目-&amp;gt;Build Path-&amp;gt;Config Build Path-&amp;gt;Java Build Path-&amp;gt;Libaryies-&amp;...am
  • 使用 Nginx 部署静态页面的方法

    千次阅读 2018-12-19 18:16:12
    英文主页: http://nginx.net 。 Nginx 作为 HTTP 服务器,有以下几项基本特性: 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。 无缓存的反向代理加速,简单的负载均衡和容错。 FastCGI,...
  • 首页的目录展示功能已经完成,在进入主页后,页面会自动向服务器发送Ajax请求,从而获取目录数据,我们将其名称cname展示到页面中;接下来要实现的是分页展示功能 分析 在点击了某一个目录后,需要展示该目录下的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,385
精华内容 2,954
关键字:

首页对应末页