JAVAWeb中分頁和批量刪除
阿新 • • 發佈:2018-12-02
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;
}