1. 程式人生 > >JAVAWeb中分頁和批量刪除

JAVAWeb中分頁和批量刪除

1.分頁操作

   分頁的方法有多種,此處採用的方法是:先規定表格中每一頁所顯示的條數pageSize,然後獲取使用者所選中的頁數currentPage,然後通過這兩個引數和mysql中的limit去獲取相應的資料。

    (1)為了便於操作,此處編寫了一個page類

     

import java.util.List;

public class Page {
	private int currentPage;// 當前頁
	private int totalPage;// 總頁數
	private int count;// 一頁多少條資料
	private List<Book> books;// 當前頁的圖書資料
	private int totalCount;// 資料總條數

	//此處省略了Getters和Settesrs以及構造方法

}

   (2)JSP頁面主要程式碼

     bookShow.jsp

        <c:if test="${page.currentPage>1 }">
		   <a href="GetBook.do?getBookParam=getAllBook&page=${page.currentPage-1}">上一頁</a>
		</c:if>
		   <a href="GetBook.do?getBookParam=getAllBook&page=${1}">首頁</a>
		<c:forEach begin="1" end="${page.totalPage }" step="1" var="i">
			<c:if test="${page.currentPage==i }">
				<a href="GetBook.do?getBookParam=getAllBook&page=${i}"><font
					color="#ff0000">${i}</font></a>
			</c:if>
			<c:if test="${page.currentPage!=i }">
				<a href="GetBook.do?getBookParam=getAllBook&page=${i}">${i}</a>
			</c:if>
		</c:forEach>
		   <a href="GetBook.do?getBookParam=getAllBook&page=${page.totalPage}">末頁</a>
		<c:if test="${page.currentPage< page.totalPage }">
		   <a href="GetBook.do?getBookParam=getAllBook&page=${page.currentPage+1}">下一頁</a>
		</c:if>

    (3)Servlet主要程式碼

       GetBook.do

     

        String getBookParam = request.getParameter("getBookParam");
		System.out.println("獲取到的getBookParam:" + getBookParam);
		//獲取固定頁的圖書資訊
		if ("getAllBook".equals(getBookParam)) {
			int currentPage = 1;
			int pageSize = 5;
			String value = request.getParameter("page");
			if(value!=null&&!"".equals(value)){         
	            currentPage = Integer.parseInt(value);
	        }
			page  = bookService.getPagingBooks(currentPage, pageSize);
			request.setAttribute("page", page);
			request.getRequestDispatcher("bookShow.jsp?page="+currentPage).forward(request, response);
		} 

        (4)實體類對應介面中的相關程式碼

          BookDaoImp.java   中的getPagingBooks()

         

@Override
	public List<Book> getPagingBooks(int currentPage, int pageSize) {
		conn = DataBaseHelper.getConn();
		ResultSetHandler<List<Book>> rsh = new BeanListHandler<Book>(Book.class);
		String sql = "SELECT * FROM book LIMIT ?,?;";
		try {
			return run.query(conn, sql, rsh, (currentPage - 1) * pageSize, pageSize);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

 

   

      2、批量操作

     (1)JSP頁面中

        在表格中增加一列,該列中的每一行都是一個多選框,每個多選框的值為對應行的ID,如:

<td><input type="checkbox" id="subcheck" name="subcheck"
							value="${book.bookId}" /></td>

       刪除按鈕:用於觸發批量刪除事件

   JS程式碼:先獲取所有選中的多選框,然後將它們對應的值(即ID)新增到一個JS陣列中,然後將資料通過AJAX的方式傳到後臺進行批量刪除。

        

<script type="text/javascript">
//批量刪除
function batchDelete(){
	 var checkedNum = $("input[name='subcheck']:checked").length;
     if(checkedNum==0){
         alert("請至少選擇一項!");
         return false;
     }
     if(confirm("確定刪除所選專案?")){
     var checkedList = new Array();
     $("input[name='subcheck']:checked").each(function(){
         checkedList.push($(this).val());
     });
          var url = "BookController.do";
		  var data={"operate":"batchDelete","delitems":checkedList.toString()};  
		  //alert("delitems:"+checkedList.toString());
		  //可返回三個回撥函式,success(),complete(),error()
		  //在jQuery3.0後,要用jqXHR.done(),jqXHR.fail(),jqXHR.always()來代替
		   //success(),執行成功執行的回撥函式
		  var jqxhr = $.post(url,data,success);
		  jqxhr.fail(function(xhr,error,throwerror){
			  art.dialog.tips('刪除失敗!');
   		  });
     }	  
	
}
</script>

         (2)在具體的資料庫操作中通過繫結的方式進行批量刪除

      

// 批量刪除
	@Override
	public boolean batchDelete(String[] bookIdStr) {
		conn = DataBaseHelper.getConn();
		String sql = "DELETE FROM book WHERE bookId=?";
		try {
			PreparedStatement pstat = conn.prepareStatement(sql);
			for (int i = 0; i < bookIdStr.length; i++) {
				int bookId = Integer.parseInt(bookIdStr[i]);
				pstat.setInt(1, bookId);
				pstat.addBatch();
			}
			return pstat.executeBatch() != null;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return false;
	}