如何在jsp中用jstl实现一个分页
2个回答
展开全部
<c:set var="basePath">${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/</c:set><base href="${basePath}"><c:set var="columns" value="5"></c:set><table cellspacing="0" cellpadding="0" > <tr> <th style="text-align:center" colspan="${columns }"><h3>列表</h3></th> </tr> <c:set var="page" value="${page}"></c:set> <c:forEach var="word" varStatus="status" items="${page.result}"> <c:if test="${status.index%columns == 0}"><tr></c:if> <td><div>${word[0]}</div><div class="colon">:</div><div class="view">${word[1] }</div></td> <c:if test="${status.last&&status.index%columns != (columns-1)}"> <c:forEach begin="1" end="${columns-1 - status.index%columns}" step="1"> <td></td> </c:forEach> </c:if> <c:if test="${status.index%columns == columns-1||status.last}"></tr></c:if> </c:forEach> <c:set var="btns" value="5"></c:set> <c:set var="halfbtns" value="${btns%2==0?btns/2:(btns-btns%2)/2}"></c:set> <c:set var="middlebtns" value="${halfbtns + 1}"></c:set> <c:set var="pgNum" value="${page.pageNo}"></c:set> <c:set var="pgSize" value="${page.pageSize}"></c:set> <c:set var="totalCount" value="${page.totalCount}"></c:set> <c:set var="totalPage" value="${page.totalPage}"></c:set> <c:if test="${totalCount - pgSize>0}"> <tr> <td colspan="${columns }"> <c:forEach begin="${pgNum<middlebtns?1:((pgNum+halfbtns-totalPage)>0?((totalPage-btns + 1 > 0)?(totalPage-btns + 1):1):(pgNum-halfbtns))}" end="${pgNum<middlebtns?((totalPage>btns)?btns:totalPage):(pgNum>(totalPage-halfbtns)?totalPage:(pgNum+halfbtns))}" varStatus="stat"> <c:if test="${pgNum>1&&stat.first}"><a class="pnBtn" href="${basePath}servlet?pageno=1&pagesize=${pgSize}">首页</a><a class="pnBtn" href="${basePath}servlet?pageno=${pgNum-1}&pagesize=${pgSize}">上一页</a><c:if test="${stat.index>1}">...</c:if></c:if> <c:if test="${stat.index<=totalPage}"> <c:choose> <c:when test="${stat.index == pgNum}"> <span class="current">${stat.index }</span> </c:when> <c:otherwise> <a href="${basePat}hservlet?pageno=${stat.index}&pagesize=${pgSize}">${stat.index }</a> </c:otherwise> </c:choose> </c:if> <c:if test="${(pgNum-totalPage<0)&&stat.last}"><c:if test="${stat.index<totalPage}">...</c:if><a class="pnBtn" href="${basePath}servlet?pageno=${pgNum+1}&pagesize=${pgSize}">下一页</a><a class="pnBtn" href="${basePath}servlet?pageno=${totalPage}&pagesize=${pgSize}">末页</a></c:if> </c:forEach> </td> </tr> </c:if></table>
其实这begin和end写的逻辑我自己都有些迷糊了...
以显示5个按钮为例,
对于起始页,即显示的第一个页码按钮
1.如果当前页小于3,起始页固定为1,
2.如果当前页大于3(包括3),
1.当前页与尾页的差少于2,
1.如果总页数在5页以上(包括5),起始页固定为尾页数过来第5个
2.总页数小于5,起始页固定为1
2.正常情况,起始页为当前页-2
对于末页,即显示的最后一个页码按钮
1.如果当前页小于3
1.如果总页数比5要大,末页为5
2.比5小,末页为尾页
2.当前页大于3
1.当前页与尾页差小于2,末页为尾页
2.否则末页为当前页+2
上面例子中page.result返回的是一个List<Object[]>集合
其实这begin和end写的逻辑我自己都有些迷糊了...
以显示5个按钮为例,
对于起始页,即显示的第一个页码按钮
1.如果当前页小于3,起始页固定为1,
2.如果当前页大于3(包括3),
1.当前页与尾页的差少于2,
1.如果总页数在5页以上(包括5),起始页固定为尾页数过来第5个
2.总页数小于5,起始页固定为1
2.正常情况,起始页为当前页-2
对于末页,即显示的最后一个页码按钮
1.如果当前页小于3
1.如果总页数比5要大,末页为5
2.比5小,末页为尾页
2.当前页大于3
1.当前页与尾页差小于2,末页为尾页
2.否则末页为当前页+2
上面例子中page.result返回的是一个List<Object[]>集合
追问
那如果我想写的一页只显示三条记录,从而进行分页,这个算法逻辑该怎么写呢!请教高人指点,谢谢!!!
展开全部
<c:forEach items="${recordList}" var="record" varStatus="status">
<tr class="ListRow1">
<td align="center">
<input type="checkbox" name="checkcellbox" value="${record.groupid}" onclick="doCheckSell()"/>
</td>
<td id="uname" align="center"><c:out value="${record.groupname}"></c:out></td>
<td id="setFlag" align="center"><c:if test="${record.status == 1}">
无效
</c:if>
<c:if test="${record.status == 0}">
有效
</c:if></td>
<td id="editFlag" align="center"><a href="javascript:doEdit(${record.groupid})" >编辑</a>
<a href="javascript:doDelete(${record.groupid})" >删除</a></td>
</tr>
</c:forEach>
<tr class="ListRow1">
<td colspan="7" align="right">
<LABEL>共</LABEL><c:out value="${model.allPageCount}"></c:out><LABEL>条记录 </LABEL>
<LABEL>显示第</LABEL><c:out value="${model.currentCount}"></c:out><LABEL>页</LABEL>
<LABEL>/</LABEL><LABEL>共</LABEL><c:out value="${model.pageCount}"></c:out><LABEL>页</LABEL>
<c:if test="${model.currentCount != 1 && model.pageCount != 0}">
<a href="javascript:doChangePage(1)" >首页</a>
<a href="javascript:doChangePage(${model.currentCount-1})" >上一页</a>
</c:if>
<c:if test="${model.currentCount != model.pageCount}">
<a href="javascript:doChangePage(${model.currentCount+1})" >下一页</a>
<a href="javascript:doChangePage(${model.pageCount})" >末页</a>
</c:if>
</td>
</tr>
<tr class="ListRow1">
<td align="center">
<input type="checkbox" name="checkcellbox" value="${record.groupid}" onclick="doCheckSell()"/>
</td>
<td id="uname" align="center"><c:out value="${record.groupname}"></c:out></td>
<td id="setFlag" align="center"><c:if test="${record.status == 1}">
无效
</c:if>
<c:if test="${record.status == 0}">
有效
</c:if></td>
<td id="editFlag" align="center"><a href="javascript:doEdit(${record.groupid})" >编辑</a>
<a href="javascript:doDelete(${record.groupid})" >删除</a></td>
</tr>
</c:forEach>
<tr class="ListRow1">
<td colspan="7" align="right">
<LABEL>共</LABEL><c:out value="${model.allPageCount}"></c:out><LABEL>条记录 </LABEL>
<LABEL>显示第</LABEL><c:out value="${model.currentCount}"></c:out><LABEL>页</LABEL>
<LABEL>/</LABEL><LABEL>共</LABEL><c:out value="${model.pageCount}"></c:out><LABEL>页</LABEL>
<c:if test="${model.currentCount != 1 && model.pageCount != 0}">
<a href="javascript:doChangePage(1)" >首页</a>
<a href="javascript:doChangePage(${model.currentCount-1})" >上一页</a>
</c:if>
<c:if test="${model.currentCount != model.pageCount}">
<a href="javascript:doChangePage(${model.currentCount+1})" >下一页</a>
<a href="javascript:doChangePage(${model.pageCount})" >末页</a>
</c:if>
</td>
</tr>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询