jquery+Ajax 간단 한 페이지 효과 구현
1.jsp 페이지 라면 EL 표현 식 과 JSTL 태그 로 페이지 바 를 만 들 수 있 습 니 다.어렵 지 않 습 니 다.EL 표현 식 과 JSTL 태그 로 이 루어 진 단점 은 비동기 효 과 를 실현 하지 못 하고 전체 페이지 를 다시 갱신 한 것 이다.
2.일반적인 html 페이지 라면 EL 표현 식 과 JSTL 라벨 을 사용 할 수 없습니다.이 때 는 비동기 Ajax 방식 으로 만 이 루어 질 수 있 습 니 다.물론 JSP 페이지 는 두 가지 방식 으로 사용 할 수 있 습 니 다.
3.페이지 바,여 기 는 Ajax 와 Jquery 로 만 들 었 습 니 다.실현 하기 가 비교적 번 거 롭 고 코드 가 매우 길다.왜냐하면 모두 한 무더기 의 문자열 을 연결 한 다음 에 html()방법 이나 append()방법 으로 문서 의 내용 을 바 꾸 기 때문이다.
사전 분석
브 라 우 저 측 에서 서버 측 에 보 내야 할 인 자 는 두 가지 가 있 습 니 다.
① 현재 페이지 currentPage;
② 페이지 크기(한 페이지 에 몇 개의 기록 을 표시)pageSize.
서버 측 이 브 라 우 저 측 에 보 낸 것 은 JSon 형식의 데이터,즉 페이지 실체 클래스 PageBean 입 니 다.그 중에서 PageBean 은 다음 과 같은 필드 가 있 습 니 다.
① 총 기록 수 totalCount;
② 총 페이지 totalPage;
③ 각 페이지 의 데이터 List list;
④ 현재 페이지 현재 페이지;
⑤ 각 페이지 에 표 시 된 기록 수 pageSize.
이 PageBean 은 범 형 을 지원 합 니 다.코드 는 다음 과 같 습 니 다.
public class PageBean<T>
{
private int totalCount; //
private int totalPage ; //
private List<T> list ; //
private int currentPage ; //
private int rows;// , pageSize
public int getTotalCount()
{
return totalCount;
}
public void setTotalCount(int totalCount)
{
this.totalCount = totalCount;
}
public int getTotalPage()
{
return totalPage;
}
public void setTotalPage(int totalPage)
{
this.totalPage = totalPage;
}
public List<T> getList()
{
return list;
}
public void setList(List<T> list)
{
this.list = list;
}
public int getCurrentPage()
{
return currentPage;
}
public void setCurrentPage(int currentPage)
{
this.currentPage = currentPage;
}
public int getRows()
{
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
@Override
public String toString()
{
return "PageBean{" +
"totalCount=" + totalCount +
", totalPage=" + totalPage +
", list=" + list +
", currentPage=" + currentPage +
", rows=" + rows +
'}';
}
}
페이지 를 나 누 려 면 SQL 문장의'limit'을 사용 해 야 합 니 다.예 를 들 어 의 미 를 설명 하 다.
select * from student limit 2,5;
구체 적 인 의미:student 표 에서 데 이 터 를 조회 하고 색인 이'2'인 기록 부터 조회 한 다음 에 5 가 지 를 찾 습 니 다.색인 은 0 에서 시작 되 기 때문에 위의 문 구 는 3,4,5,6,7 조 기록 을 조회 한 것 과 같 고 모두 5 조 기록 이다.
한 마디 로 하면 첫 번 째 숫자 는'어디서부터 찾 아 볼 까'라 는 뜻 이 고,두 번 째 숫자 는'몇 개 뒤로 찾 아 보 자'는 뜻 이다.
이곳 의"어디서부터 조사 할 것 인가"는 계산 이 필요 하 다.공식 은 다음 과 같다.
(currentPage-1)×pageSize
즉,현재 페이지 번호 에서 1,괄호 를 빼 고 페이지 크기 를 곱 하 는 것 이다.
그래서 검색 어의 위조 코드 는 다음 과 같다.
select * from student limit (currentPage-1)×pageSize,pageSize;
총 페이지 번호 totalPage 에 대해 서 는 총 기록 수 totalCount 와 페이지 크기 pageSize 를 통 해 계산 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다:
totalPage=totalCount%pageSize==0?totalCount/pageSize:(totalCount/pageSize+1);
5.서버 측 주요 코드
import com.fasterxml.jackson.databind.ObjectMapper;
import domain.PageBean;
import domain.RainFall;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;
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 java.io.IOException;
import java.util.List;
@WebServlet("/ViewRainByPageServlet")
public class ViewRainByPageServlet extends HttpServlet
{
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
String sql="select * from rain_fall limit ?,?";//
String sql2="select * from rain_fall";//
List<RainFall> countList = template.query(sql2, new BeanPropertyRowMapper<RainFall>(RainFall.class));
int totalCount=countList.size();//
int totalPage;// ,
String currentPage = request.getParameter("currentPage");
String pageSize = request.getParameter("pageSize");
int intCurrentPage = Integer.parseInt(currentPage);//
if(intCurrentPage==0)// ,currentPage 1, 0
{
intCurrentPage=1;// currentPage=0, 1,
}
int intPageSize = Integer.parseInt(pageSize);//
totalPage=totalCount%intPageSize==0?totalCount/intPageSize:(totalCount/intPageSize+1);//
if(intCurrentPage>totalPage)// ,currentPage 1,
{
intCurrentPage=totalPage;//
}
int startIndex=(intCurrentPage-1)*intPageSize;// ?
List<RainFall> list = template.query(sql, new BeanPropertyRowMapper<RainFall>(RainFall.class),startIndex,intPageSize);
ObjectMapper mapper=new ObjectMapper();
response.setContentType("application/json;charset=utf-8");//
PageBean<RainFall> pageBean=new PageBean<>();// PageBean
// PageBean
pageBean.setTotalCount(totalCount);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.setCurrentPage(intCurrentPage);
pageBean.setRows(intPageSize);
//
System.out.println(pageBean);
mapper.writeValue(response.getOutputStream(),pageBean);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.doPost(request, response);
}
}
6.전단 코드(긴)
<%--
Created by Yingyong Lao.
User: laoyingyong
Date: 2019-12-10
Time: 19:28
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title> </title>
<!-- 1. CSS -->
<link href="css/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery , 1.9 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. bootstrap js -->
<script src="js/bootstrap.min.js"></script>
<script>
$(function () //
{
$.post("ViewRainByPageServlet",{currentPage:1,pageSize:5},function (data)// ajax , 5 ,
{
var totalCount=data.totalCount;//
var totalPage=data.totalPage;//
var currentPage=data.currentPage;//
if(currentPage==1)// 1, , class="disabled" , “ ”
{
var str=' <li class="disabled" οnclick="findByPage('+(currentPage-1)+',5)">
' +
' <a href="#" aria-label="Previous">
' +
' <span aria-hidden="true">«</span>
' +
' </a>
' +
' </li>';
}
else//
{
var str=' <li οnclick="findByPage('+(currentPage-1)+',5)">
' +
' <a href="#" aria-label="Previous">
' +
' <span aria-hidden="true">«</span>
' +
' </a>
' +
' </li>';
}
for(var i=1;i<=totalPage;i++)// , ( )
{
if(i==currentPage)// currentPage, class="active",
{
var item='<li οnclick="findByPage('+i+',5);" class="active"><a href="#">'+i+'</a></li>';
}
else
{
var item='<li οnclick="findByPage('+i+',5);"><a href="#">'+i+'</a></li>';
}
str=str+item;
}
if(currentPage==totalPage)// , , class="disabled" , “ ”
{
var strend='<li class="disabled" οnclick="findByPage('+(currentPage+1)+',5)">
' +
' <a href="#" aria-label="Next">
' +
' <span aria-hidden="true">»</span>
' +
' </a>
' +
' </li>
' +
' <span style="font-size: 24px" id="total_sp"> '+totalCount+' , '+totalPage+' </span>';
}
else // ,
{
var strend='<li οnclick="findByPage('+(currentPage+1)+',5)">
' +
' <a href="#" aria-label="Next">
' +
' <span aria-hidden="true">»</span>
' +
' </a>
' +
' </li>
' +
' <span style="font-size: 24px" id="total_sp"> '+totalCount+' , '+totalPage+' </span>';
}
str=str+strend;
$("#fenyelan").html(str);//
var array=data.list;
for(var i=0;i<array.length;i++)
{
var obj=array[i];
var id=obj.id;
var area=obj.area;
var precipitation=obj.precipitation;
var month=obj.month;
var releaseDate=obj.releaseDate;
//
$("#rain_table").append('<tr class="info">
' +
' <td style="text-align: center">'+id+'</td>
' +
' <td style="text-align: center">'+area+'</td>
' +
' <td style="text-align: center">'+precipitation+'</td>
' +
' <td style="text-align: center">'+month+'</td>
' +
' <td style="text-align: center">'+releaseDate+'</td>
' +
' </tr>');
}
});// ajax end
});// end
// , , ,
function findByPage(curPage,paSize) // , : ( )
{
$.post("ViewRainByPageServlet",{currentPage:curPage,pageSize:paSize},function (data) // ajax
{
var totalCount=data.totalCount;//
var totalPage=data.totalPage;//
var currentPage=data.currentPage;//
if(currentPage==1)// 1, , class="disabled" , “ ”
{
var str=' <li class="disabled" οnclick="findByPage('+(currentPage-1)+',5)">
' +
' <a href="#" aria-label="Previous">
' +
' <span aria-hidden="true">«</span>
' +
' </a>
' +
' </li>';
}
else// ,
{
var str=' <li οnclick="findByPage('+(currentPage-1)+',5)">
' +
' <a href="#" aria-label="Previous">
' +
' <span aria-hidden="true">«</span>
' +
' </a>
' +
' </li>';
}
//
for(var i=1;i<=totalPage;i++)
{
if(i==currentPage)// currentPage, class="active",
{
var item='<li οnclick="findByPage('+i+',5);" class="active"><a href="#">'+i+'</a></li>';
}
else
{
var item='<li οnclick="findByPage('+i+',5);"><a href="#">'+i+'</a></li>';
}
str=str+item;
}
if(currentPage==totalPage)// , , class="disabled" , “ ”
{
var strend='<li class="disabled" οnclick="findByPage('+(currentPage+1)+',5)">
' +
' <a href="#" aria-label="Next">
' +
' <span aria-hidden="true">»</span>
' +
' </a>
' +
' </li>
' +
' <span style="font-size: 24px" id="total_sp"> '+totalCount+' , '+totalPage+' </span>';
}
else // ,
{
var strend='<li οnclick="findByPage('+(currentPage+1)+',5)">
' +
' <a href="#" aria-label="Next">
' +
' <span aria-hidden="true">»</span>
' +
' </a>
' +
' </li>
' +
' <span style="font-size: 24px" id="total_sp"> '+totalCount+' , '+totalPage+' </span>';
}
str=str+strend;
$("#fenyelan").html(str);//
//
var tableStr='<caption style="text-align: center;font-size: 24px"> </caption>
' +
' <tr class="success">
' +
' <th style="text-align: center">id</th>
' +
' <th style="text-align: center"> </th>
' +
' <th style="text-align: center"> (mm)</th>
' +
' <th style="text-align: center"> </th>
' +
' <th style="text-align: center"> </th>
' +
' </tr>';
var array=data.list;//
for(var i=0;i<array.length;i++)//
{
var obj=array[i];//
var id=obj.id;
var area=obj.area;
var precipitation=obj.precipitation;
var month=obj.month;
var releaseDate=obj.releaseDate;
//
var oneRecord='<tr class="info">
' +
' <td style="text-align: center">'+id+'</td>
' +
' <td style="text-align: center">'+area+'</td>
' +
' <td style="text-align: center">'+precipitation+'</td>
' +
' <td style="text-align: center">'+month+'</td>
' +
' <td style="text-align: center">'+releaseDate+'</td>
' +
' </tr>';
tableStr=tableStr+oneRecord;// , ,
}
$("#rain_table").html(tableStr);//
});//ajax end
}// end
</script>
</head>
<body>
<div class="container">
<div class="row">
<table class="table table-bordered table-hover" id="rain_table">
<caption style="text-align: center;font-size: 24px"> </caption>
<tr class="success">
<th style="text-align: center">id</th>
<th style="text-align: center"> </th>
<th style="text-align: center"> (mm)</th>
<th style="text-align: center"> </th>
<th style="text-align: center"> </th>
</tr>
</table>
<nav aria-label="Page navigation">
<ul class="pagination" id="fenyelan">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li><a href="#">1</a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
<span style="font-size: 24px" id="total_sp"> 2 , 1 </span>
</ul>
</nav>
</div>
</div>
</body>
</html>
7.효과 전시이것 은 단지 간단 한 페이지 항목 일 뿐 바 이 두 페이지 의'앞 5 후 4'효과 가 없다.데이터 양 이 매우 많아 지면 이 페이지 는 매우 큰 공간 을 차지 할 것 이다.시간 이 있 으 면 다시 최적화 하 세 요.Jquery 코드 에 대해 서 는 코드 의 주석 에 이미 충분히 쓰 여 있 으 며,여 기 는 더 이상 설명 을 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.