通用分页思路以及问题解决(下)

通用分页核心思路

将上一次查询请求再发一次,只不过页码变了
如图在这里插入图片描述
思路:

  1. 对pagebean增强(添加url、paramMap属性,添加初始化pagebean的方法、最大页、上一页、下一页方法)
  2. 自定义page分页标签(助手类、tld、jsp引用标签库)
  3. 将按钮条写入标签助手类
  4. 将隐藏的form表单写入标签助手类
  5. 将对应的js代码写入标签助手类
  6. 最后:
    测试通用分页是否完善
    1.准备工具类
    1.连接mysql的数据库有
    在这里插入图片描述
    先导包
    在这里插入图片描述
    .新建config.properties
#oracle9i#driver=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@localhost:1521:ora9#user=test#pwd=test  #sql2005#driver=com.microsoft.sqlserver.jdbc.SQLServerDriver#url=jdbc:sqlserver://localhost:1423;DatabaseName=test#user=sa#pwd=sa  #sql2000#driver=com.microsoft.jdbc.sqlserver.SQLServerDriver#url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=unit6DB#user=sa#pwd=888888  #mysql5driver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTuser=rootpwd=123

在这里插入图片描述
新建 DBAccess.java

package com.wxm.util; import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties; 
/** * 提供了一组获得或关闭数据库对象的方法 *  
*/public class DBAccess {	
private static String driver;	
private static String url;	
private static String user;	
private static String password; 	
static {// 静态块执行一次,加载 驱动一次		
try {			
InputStream is = DBAccess.class.getResourceAsStream("config.properties"); 			Properties properties = new Properties();		
properties.load(is); 			
driver = properties.getProperty("driver");			
url = properties.getProperty("url");			
user = properties.getProperty("user");			
password = properties.getProperty("pwd"); 			
Class.forName(driver);		
} catch (Exception e) {			
e.printStackTrace();			
throw new RuntimeException(e);		
}	
} 	
/**	
 * 获得数据连接对象	 
 * * 	 
 * * @return	
*/	
public static Connection getConnection() {		
try {			
Connection conn = DriverManager.getConnection(url, user, password);			
return conn;		
} catch (SQLException e) {			
e.printStackTrace();			t
hrow new RuntimeException(e);		
}	
} 	
public static void close(ResultSet rs) {		
if (null != rs) {			
try {				
rs.close();			
} catch (SQLException e) {				
e.printStackTrace();				
throw new RuntimeException(e);			
}		
}	
} 	
public static void close(Statement stmt) {		
if (null != stmt) {			
try {				
stmt.close();			
} catch (SQLException e) {				
e.printStackTrace();				
throw new RuntimeException(e);			
}		
}	
} 	
public static void close(Connection conn) {		
if (null != conn) {			
try {				
conn.close();			
} catch (SQLException e) {				
e.printStackTrace();				
throw new RuntimeException(e);			
}		
}	
} 	
public static void close(Connection conn, Statement stmt, ResultSet rs) {		
close(rs);		
close(stmt);		
close(conn);	
} 	
public static boolean isOracle() {		
return "oracle.jdbc.driver.OracleDriver".equals(driver);	
} 	p
ublic static boolean isSQLServer() {		
return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);	
}		
public static boolean isMysql() {		
return "com.mysql.jdbc.Driver".equals(driver);	
} 	
public static void main(String[] args) {		
Connection conn = DBAccess.getConnection();		
DBAccess.close(conn);		
System.out.println("isOracle:" + isOracle());		
System.out.println("isSQLServer:" + isSQLServer());		
System.out.println("isMysql:" + isMysql());		
System.out.println("数据库连接(关闭)成功");	

}
}

运行会显示数据库成功
在这里插入图片描述

2.准备分页工具类新建PageBean

package com.wxm.util; 
import java.util.HashMap;
import java.util.Map;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest; 
 /** *分页工具 * 
 */public class PageBean { 	
 private int page = 1;// 页码 	
 private int rows = 10;// 页大小 	
 private int total = 0;// 总记录数  	
 //保留上一次 的请求地址
 private String url="";
 //保留上一次请求所携带的参数
 private  Map<String, String[]> paMap=new HashMap<>();
 /** * pageBean初始化的方法
  * @param req 
  */   
   public void setRequest(HttpServletRequest req) {    	
   //改变它第几页的数据    	
   this.setPage(req.getParameter("page"));    	
   //改变它每页展示的数据//    	
   System.out.println(req.getParameter("rows"));    	
   if(req.getParameter("rows")!=null) {    	
   this.setRows(Integer.parseInt(req.getParameter("rows")));    	
   }else {    		
   this.setRows(10);    	
   }    	
   //控制页面是否分页    	
   this.setPagination(req.getParameter("pagination"));    	    	    	
   this.setUrl(req.getRequestURL().toString());//上一次的地址    	
   this.setPaMap(req.getParameterMap());//上一次查询的参数   
    } 	
    private void setPagination(String parameter) {		
    // 当你填false就不分页		
    if("false".equals(pagination)) {			
    this.setPagination(false);		
    }	
    }    
    public void setPage(String page) {//    	如果不为空的时候    	
    if(StringUtils.isNotBlank(page)) {    		
    this.setPage(Integer.valueOf(page));    	
    }   
     }	
     public String getUrl() {	
     return url;
     } 
     public void setUrl(String url) {	
     this.url = url
     ;}   	
     public Map<String, String[]> getPaMap() {	
     return paMap;
     } 
     public void setPaMap(Map<String, String[]> paMap) {	
     this.paMap = paMap;
     }   	
     private boolean pagination = true;// 是否分页 	
     public PageBean() {		
     super();
     	} 	
     	public int getPage() {		
     	return page;	
     	} 	
     	public void setPage(int page) {		
     	this.page = page;	
     	} 	
     	public int getRows() {		
     	return rows;	
     	} 	
     	public void setRows(int rows) {		
     	this.rows = rows;	
     	} 	
     	public int getTotal() {		
     	return total;
     		} 	
     		public void setTotal(int total) {		
     		this.total = total;	
     		} 	
     		public void setTotal(String total) {		
     		this.total = Integer.parseInt(total);	
     		} 	
     		public boolean isPagination() {		
     		return pagination;
     			} 	
     			public void setPagination(boolean pagination) {		
     			this.pagination = pagination;	
     			} 	
     			/**	 
     			*获得起始记录的下标	 
     			* 	 
     			* @return	 
     			* */	
     			public int getStartIndex() {		
     			return (this.page - 1) * this.rows;	
     			} 	
     			@Override	
     			public String toString() {		
     			return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";	
     			}
     			/** * 最大页码 
     			* @return 
     			* */	
     			public int getMaxPage() {	
     			return this.total%this.rows==0? this.total/this.rows:this.total/this.rows+1;			}	
     			/**	
     			 * 获取下一页	
     			 * @return	 
     			 * */  
     			 public int getNextPage() {	
     			 return this.page<this.getMaxPage()?this.page+1:this.page;	    
     			 }
     			   
 public int getPreviousPage() {	
     			   return this.page>1?this.page-1:this.page;	    
     			   }
     			   }

3.新建编码工具类EncodingFiter

package com.wxm.util; 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException;
import java.util.Iterator;i
mport java.util.Map;
import java.util.Set;     
/** 
* 中文乱码处理 
* *  
* */
public class EncodingFiter implements Filter { 	
private String encoding = "UTF-8";// 默认字符集 	
public EncodingFiter() {		
super();	
} 	
public void destroy() {	
} 	
public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		
HttpServletRequest req = (HttpServletRequest) request;		
HttpServletResponse res = (HttpServletResponse) response; 		
// 中文处理必须放到 chain.doFilter(request, response)方法前面		
res.setContentType("text/html;charset=" + this.encoding);		
if (req.getMethod().equalsIgnoreCase("post")) {			
req.setCharacterEncoding(this.encoding);		
} else {			
Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合			Set set = map.keySet();// 取出所有参数名			
Iterator it = set.iterator();			
while (it.hasNext()) {				
String name = (String) it.next();				
String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]				for (int i = 0; i < values.length; i++) {					
values[i] = new String(values[i].getBytes("ISO-8859-1"),							this.encoding);				
}			
}		
} 		
chain.doFilter(request, response);	
} 	
public void init(FilterConfig filterConfig) throws ServletException {		
String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集		if (null != s && !s.trim().equals("")) {			
this.encoding = s.trim();		
}	
}  
} 

配置xml过滤器,
在这里插入图片描述

4.新建字符处理工具类
StringUtils.java

package com.wxm.util; public class StringUtils {	// 私有的构造方法,保护此类不能在外部实例化	private StringUtils() {	} 	/**	 * 如果字符串等于null或去空格后等于"",则返回true,否则返回false	 * 	 * @param s	 * @return	 */	public static boolean isBlank(String s) {		boolean b = false;		if (null == s || s.trim().equals("")) {			b = true;		}		return b;	}		/**	 * 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false	 * 	 * @param s	 * @return	 */	public static boolean isNotBlank(String s) {		return !isBlank(s);	} }

后台
1.Book

package com.wxm.entity; 
public class Book {
private long bid;
private String bname;
private float price;
public Book() {	
super();
}
public Book(long bid, String bname, float price) {	
super();	
this.bid = bid;	
this.bname = bname;	
this.price = price;
}
public long getBid() {	
return bid;
}
public void setBid(long bid) {	
this.bid = bid;
}
public String getBname() {	
return bname;
}
public void setBname(String bname) {	
this.bname = bname;
}
public float getPrice() {	
return price;
}
public void setPrice(float price) {	
this.price = price;
}
@Overridepublic String toString() {	
return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
} 
 }

2.BeanDao

package com.wxm.base.dao; 
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; 
import com.wxm.util.DBAccess;
import com.wxm.util.PageBean; 
/** 
* 通用分页查询(带条件查询) 
* @author 2019071003
*/public class BeanDao<T> {
	/**	
	 * 	
	  * @param sql 由于不同的表查询语句不一样,所以靠子类写好来传递	
	  * @param cls	需要返回不同的对象集合 查询的对象	
	  * @param bean 可能要分页	
	   * @return	 
	   * @throws Exception	 
	   */	
	   public List<T> sqlBean (String sql,Class cls,PageBean bean) throws Exception{		List<T> list = new ArrayList<>();		
	   Connection con = DBAccess.getConnection();		
	   PreparedStatement ps = null;		
	   ResultSet rs = null;		//决定是否分页:		
	   if(bean != null && bean.isPagination()) {//判读条件			
	   //分页			
	   /**			
	    * 1.分页是与分页助手类pagebean中的total有关,需要查询数据库得到total赋值给bean			 
	    * * 2.查询出符合条件的某一页的数据			
	    *  */			
	    String countsql = getCountsql(sql);			 
	    ps = con.prepareStatement(countsql);			
	     rs = ps.executeQuery();			
	      /**			  
	      * -- 符合条件的记录数					
	      * select count(1) from (select * from t_mvc_book where bname like '%斗破%') t;			  */			
	      if(rs.next()){				
	      bean.setTotal(rs.getObject(1).toString());//查询多少条数据			
	      }			
	      /**			 
	      * --分页的查询语句					
	      select * from t_mvc_book where bname like '%斗破%' limit 起始下标(第几页),变量(每页显示几条)			
	       */			
	       String  pagesql = getPagesql(sql, bean);			
	       ps = con.prepareStatement(pagesql);			
	        rs = ps.executeQuery();			 		
	        }else {			//不分页			
	         ps = con.prepareStatement(sql);			
	         rs = ps.executeQuery();					
	         }						
	         T t = null;		
	         while (rs.next()) {			
	         /
	        **			 
	         * 1. 实例化一个你要查询的对象 (比如book)			 
	         * * 2. 通过对象的属性名去游标中取出属性值(通过反射来完成)			 *    2.1 获取到类对象中的属性			 
	         * *    2.2 给属性赋值			 
	         * * 3. 已经赋值好的实例对象放入到list集合当中			 
	         * */		
	         t = (T) cls.newInstance();//反射获取对象开始			
	         Field [] fields = cls.getDeclaredFields();			
	         for (Field f : fields) {				
	         f.setAccessible(true);//打开权限				/
	         /    对象				对象的属性名				
	         f.set(t, rs.getObject(f.getName()));			
	         }			
	         list.add(t);		
	         }		
	         return list;	
	         } 	
	         /**	 
	         * 	 
	         * @param sql 	 
	         * * @param bean 获取查询的起始下标和变量	 
	         * * @return	 
	         * */	
	         private String getPagesql(String sql , PageBean bean) {		// TODO 分页查询语句		
	         return sql + " limit " +bean.getStartIndex()+","+bean.getRows();	
	         } 	
	         private String getCountsql(String sql) {		
	         // TODO 用来查询对应条件有多少条数据  		
	         return "select count(1) from ("+sql+") t";	
	         }
	         }

3.BookDao

package com.wxm.dao; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List; import com.wxm.base.dao.BeanDao;import com.wxm.entity.Book;import com.wxm.util.DBAccess;import com.wxm.util.PageBean;import com.wxm.util.StringUtils; public class BookDao extends BeanDao<Book> {	public List<Book> list(Book book,PageBean bean) throws Exception{		String sql = "select * from t_mvc_book where true";		String bname = book.getBname();		if(StringUtils.isNotBlank(bname)) {			sql += " and bname like '%"+bname+"%'";		}		return super.sqlBean(sql, Book.class, bean);//父类的查询方法	}	 }

4.控制层BookServlet

package com.wxm.servlet; 
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map; 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.wxm.dao.BookDao;import com.wxm.entity.Book;import com.wxm.util.PageBean; public class BookServlet extends HttpServlet {	
private static final long serialVersionUID = -931932637666049506L;    
private BookDao bookDao=new BookDao();    
@Override    
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    	
doPost(req, resp);    
}    
@Override   
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    	
 String bname = req.getParameter("bname");		
 Book book=new Book();		
 book.setBname(bname);		
 PageBean pageBean=new PageBean();//				
 Map<String, String[]> paMap = req.getParameterMap();//				pageBean.setPaMap(paMap);//				
 String url = req.getRequestURL().toString();//				
 pageBean.setUrl(url);//				
 System.out.println(pageBean.getUrl());		
 //把再一次请求 保存到pageBean		
 pageBean.setRequest(req);
 //		System.out.println(req);		
 try {			
 List<Book> list = this.bookDao.list(book, pageBean);			
 req.setAttribute("bookList", list);			
 req.setAttribute("pageBean", pageBean);			
 req.getRequestDispatcher("/bookList.jsp").forward(req, resp);		
 } catch (Exception e) {			
 // TODO Auto-generated catch block			
 e.printStackTrace();		
 }    
 }}

5.配置xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>wxm_pagebean</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>  <!-- 配置编码 -->  <filter>   <filter-name>encodingFiter</filter-name>   <filter-class>com.wxm.util.EncodingFiter</filter-class>  </filter>  <filter-mapping>   <filter-name>encodingFiter</filter-name>   <url-pattern>/*</url-pattern>  </filter-mapping>  <servlet>   <servlet-name>bookServlet</servlet-name>   <servlet-class>com.wxm.servlet.BookServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>bookServlet</servlet-name>    <url-pattern>/bookServlet</url-pattern>  </servlet-mapping></web-app>

7.xxx.tld文件
位置:web-inf目录下在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">      
<description>wxm 1.1 core library</description>  <display-name>wxm core</display-name>  
<tlib-version>1.1</tlib-version>
<!-- 标签库的版本号 -->  
<short-name>c</short-name>
<!-- 标签库的简称 -->  <
uri>/wxm</uri>
<!--你标签库引用的uri  -->     
<tag>    
<!--填写的是标签库中的标签名  -->   
 <name>page</name>   
  <!--标签对应的后台助手类  -->    
  <tag-class>com.wxm.tag.PageTag</tag-class>     
  <!--标签类别  -->    
  <body-content>JSP</body-content>    
  <attribute>     
  <!-- 自定义标签中的属性 -->        
  <name>pageBean</name>       
    <!--属性值是否必填 -->        
    <required>true</required>        
     <!--是否支持El/ognl表达式  -->        
     <rtexprvalue>true</rtexprvalue>   
      </attribute>  
      </tag>   
      </taglib>

7.bookList.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>   
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
 <%@taglib uri="/wxm" prefix="m"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>    
 <h2>小说目录</h2>	
 <br> 	
 <form action="${pageContext.request.contextPath}/bookServlet"		method="post">		
 <!-- 显示的页数默认10 -->		
 <input type="hidden" name="rows" value="3">		
 书名:<input type="text" name="bname"> 
 <input type="submit"	value="确定">	
 </form>	
 <table border="1" width="100%">		
 <tr>			
 <td>编号</td>			
 <td>名称</td>			
 <td>价格</td>		
 </tr>		
 <c:forEach items="${bookList }" var="b">			
 <tr>				
 <td>${b.bid }</td>				
 <td>${b.bname }</td>				
 <td>${b.price }</td>			
 </tr>		
 </c:forEach>	
 </table>			
 <m:page pageBean="${pageBean}"  ></m:page>
 <%-- ${pageBean} --%>	
 <!-- <form id='pageBeanForm' action='' method='post'>		
 <input type='hidden' name=''> <input type='hidden' name='page'>	
 </form>		
 <div style='text-align: right; font-size: 12px;'>		每页N条,共N条,第N页,共N页  
 <a href='javascript:gotoPage(?)'>首页</a> 
  <a	href='javascript:gotoPage(?)'>上一页</a>  
  <a			href='javascript:gotoPage(?)'>下一页</a> 
   <a			href='javascript:gotoPage(?)'>尾页</a>  
   <input type='text'	id='skipPage'	style='text-align: center; font-size: 12px; width: 50px;'> 
    <a	href='javascript:skipPage()'>Go</a>	
    </div>		
    <script type='text/javascript'>		
    function gotoPage(page) {			
    document.getElementById('pageBeanForm').page.value = page;		document.getElementById('pageBeanForm').submit();		
    }		
    function skipPage() {			
    var page = document.getElementById('skipPage').value;			
    if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>maxPage){				alert('请输入1~N的数字');				
    return;			
    }			
    gotoPage(page);		
    }	</script>   --> 
    </body>
    </html>

8.助手类PageTag

package com.wxm.tag; import java.io.IOException;import java.util.Map;import java.util.Map.Entry;import java.util.Set; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport; 
import com.wxm.util.PageBean; 
public class PageTag extends BodyTagSupport{	 	
private static final long serialVersionUID = 1768059941408824100L;	
private PageBean pageBean;	
public PageBean getPageBean() {		
return pageBean;	
}	
public void setPageBean(PageBean pageBean) {		
this.pageBean = pageBean;	
}	
@Overridepublic int doStartTag() throws JspException {	
JspWriter out=pageContext.getOut();	
try {		
out.print(toHTML());	
} catch (IOException e) {		
// TODO Auto-generated catch block		
e.printStackTrace();	
}	
return SKIP_BODY;
}

private String toHTML() {//	可变的字符串容器	
StringBuilder sb=new StringBuilder();	
//	拼接下一次所分页请求所提交的分页 表单
	sb.append("<form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'>");	
sb.append("<input type='hidden' name='page'>");	
Map<String, String[]> paMap = pageBean.getPaMap();	
if(paMap != null && paMap.size()>0) {		
Set<Entry<String,String[]>> entrySet = paMap.entrySet();		
for (Entry<String, String[]> entry : entrySet) {			
for(String value : entry.getValue()) {				
if(!"page".equals(entry.getKey()))			
sb.append("<input type='hidden' name='"+entry.getKey()+"' value='"+value+"' >");		
}	
}	
}		
sb.append("</form>");//	拼接分页条	
sb.append("<div style='text-align: right; font-size: 12px;'>");	
sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  
<a href='javascript:gotoPage(1)'>首页</a>  <a");	
sb.append("	href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页</a>  <a");	
sb.append("	href='javascript:gotoPage("+pageBean.getNextPage()+")'>下一页</a>  <a");
sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a>  <input type='text'");	
sb.append(" id='skipPage'");	
sb.append(" style='text-align: center; font-size: 12px; width: 50px;'>  <a");	
sb.append(" href='javascript:skipPage()'>Go</a>");	
sb.append("</div>");		
//拼接分页的js代码			
sb.append("<script type='text/javascript'>");			
sb.append("function gotoPage(page) {");			
sb.append("document.getElementById('pageBeanForm').page.value = page;");		
sb.append("document.getElementById('pageBeanForm').submit();}");			
sb.append("function skipPage() {");			
sb.append("var page = document.getElementById('skipPage').value;");		
sb.append("if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page) >  "+pageBean.getMaxPage()+"){");			
sb.append("alert('请输入1~N的数字');");			
sb.append("return;}");			
sb.append("gotoPage(page);}");			
sb.append("</script>");									
return sb.toString();
 } } 


效果(显示第十页的数据、每页10条)在这里插入图片描述
如果想改变每页显示的条数,现在就很方法啦
在form表单里加上这行代码

在这里插入图片描述

常见问题

1.前端显示问题(代码错误)
通过谷歌浏览器F12开发模式显示出
在这里插入图片描述
下一步找出
在这里插入图片描述发现自己写错了,应该改成
在这里插入图片描述
这样就解决了错,下次一定要细心!!!
2.在这里插入图片描述
发现没有获取到url,但是我写了获取url的代码,这里需要倒溯分析法(视图层错了->去核对数据层比如我的servlet和pageBean,发现是pageBean调错方法)
在这里插入图片描述
在这里插入图片描述getRequestURL与getRequestURI的区别
URI和URL的区别
URI标记了一个网络资源,仅此而已;
URL标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址。
URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),

eclipse编译前、时报错
在这里插入图片描述
java.lang.NumberFormatException: For input string: "rows"


this.setRows(Integer.parseInt(req.getParameter(“rows”)));
解决办法:加上不为空的if条件即可
if(req.getParameter(“rows”)!=null) { this.setRows(Integer.parseInt(req.getParameter(“rows”))); }
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值