如何将下一个和上一个按钮添加到我的寻呼机行

时间:2011-02-05 16:42:21

标签: jsp jstl

如何将下一个/上一个按钮添加到此代码段,因为您可以看到,它将显示所需数量的链接,因此如果您有大量页面,那么这可能不是最佳解决方案

 <c:choose>
   <c:when test="${pages >1}">
        <div class="pagination art-hiddenfield" >
             <c:forEach var="i" begin="1"end="${pages}" step="1">
                  <c:url value="MaintenanceListVehicles.htm" var="url">
                      <c:param name="current" value="${i}"/>                
                  </c:url>
                  <c:if test="${i==current}">
                       <a href="<c:out value="${url}"/> " class="current" >
                           <c:out value="${i}" /></a>
                  </c:if>
                  <c:if test="${i!=current}">
                       <a href="<c:out value="${url}"/> " >
                           <c:out value="${i}" /></a>
                  </c:if>
              </c:forEach>
         </div>
    </c:when>
    <c:otherwise>
       <div align="center">                   
       </div>
    </c:otherwise>
</c:choose>

CSS:

.pagination .current {
    background: #26B;
    border: 1px solid #226EAD;
    color: white;
}
.pagination a {
    display: block;
    border: 1px solid #226EAD;
    color: #15B;
    text-decoration: none;
    float: left;
    margin-bottom: 5px;
    margin-right: 5px;
    padding: 0.3em 0.5em;
}
.pagination {
    font-size: 80%;
    float: right;
}
div {
    display: block;
}

这是我使用当前代码得到的: enter image description here 这就是我想要显示的内容,如果可能的话省略省略号 enter image description here

希望你能帮助我。

3 个答案:

答案 0 :(得分:2)

添加上一个/下一个链接

这应该是相当直接的,但请记住,如果你在第一页,你可能不想显示Prev,如果你在最后一页,你可能不想显示。

上一个/下一个例子

以下是Prev / Next链接的示例。在forEach上面添加第一个if块,在它下面添加第二个if块。

<c:if test="${currentPage > 1}">
    <c:url value="MaintenanceListVehicles.htm" var="prevUrl">
        <c:param name="current" value="${currentPage - 1}"/>                
    </c:url>
    <a href="<c:out value="${prevUrl}"/>">Prev</a>
</c:if>

<c:if test="${maxPages > currentPage}">
    <c:url value="MaintenanceListVehicles.htm" var="nextUrl">
        <c:param name="current" value="${currentPage + 1}"/>                
    </c:url>
    <a href="<c:out value="${nextUrl}"/>">Next</a>
</c:if>

显示省略号

这更复杂,因为它需要一个算法而不是我建议你单独使用JSP EL和/或JSTL(因为你可能不得不使用scriptlet而这些都是坏消息)。在过去,我使用了PaginationHelper bean类和JSP 2.0标记文件来完成这种分页方式。

创建一个名为PaginationPage的类,它具有整数页码和字符串标签。让PaginationHelper处理计算页面的所有逻辑,并让它返回PaginationPages的标记列表。然后标签只需要遍历页面并按照你想要的方式输出它们。

分页逻辑

以下是实现这种分页方式时需要考虑的一些逻辑:

  • 如果页数少于10页,则只显示所有页面。
  • 如果当前页码接近1,则不显示左侧省略号。
  • 显示当前页面以及之前和之后的三个页面。例如,如果当前页面是14,则显示11,12,13,14,15,16,17。您可以调整它以显示更多/少于三个,但它应该是每侧的相同页数。
  • 如果当前页码接近总页数,请不要显示正确的省略号。
  • 省略号链接应代表围绕它的两个页面之间的中点。以屏幕截图为例,第一个省略号将用于第4页((9 - 2)/ 2 = 3.5),第二个省略号用于第22页((61 - 18)/ 2 = 21.5)。

不同的应用程序实现这些规则有点不同。请随意查看其他应用程序的源代码,看看他们遵循的规则。

答案 1 :(得分:0)

看起来你非常接近...... 你有没有看过用while()循环替换你的foreach()?

[PREV] [1] [2]

    while starting at 3 and ending at Total - 2

[LAST 2] [results] [NEXT].

您也可以使用条件语句处理省略号(您不希望它们一直出现 - (即Prev 1,2 ... 3,4,5 ... 6,7,Next)

我在PHP中完成了这个问题,但我不想将其粘贴到JSP q / a中。 (我跳了一下枪)。您似乎能够以不同的视角回答您自己的问题。

答案 2 :(得分:0)

在思考了一段时间后,我想出了一项工作来完成这项工作。它真的不是很优雅,但它完成了工作。这是代码。

   <c:choose>
        <c:when test="${pages>1}">
            <div class="pagination">
                <c:if test="${current > 1}">
                    <c:url value="MaintenanceListVehicles.htm" var="prevUrl">
                        <c:param name="current" value="${current - 1}"/>                           
                    </c:url>
                    <a href="<c:out value="${prevUrl}"/>">Prev</a>
                </c:if>
                <c:set var="begin" value="1" />
                <c:set var="end" value="9" />
                <c:choose>
                    <c:when test="${current-4<=1}">
                        <c:if test="${pages< 9}">
                            <c:set var="end" value="${pages}" />
                        </c:if>
                    </c:when>
                    <c:otherwise>
                        <c:set var="begin" value="${current - 4}" />
                        <c:set var="end" value="${begin + 8}" />
                        <c:if test="${end >=pages}">
                            <c:set var="begin" value="1" />
                            <c:set var="end" value="${pages}" />
                            <c:if test="${pages> 9}">
                                <c:set var="begin" value="${pages- 8}" />
                            </c:if>
                        </c:if>
                    </c:otherwise>
                </c:choose>
                <c:forEach var="i" begin="${begin}" end="${end}" step="1">
                    <c:url value="MaintenanceListVehicles.htm" var="url">
                        <c:param name="current" value="${i}"/>                          
                    </c:url>
                    <c:choose>
                        <c:when test="${i==current}">
                            <a href="<c:out value="${url}"/> " class="current" >
                                <c:out value="${i}" /></a>
                        </c:when>
                        <c:otherwise>
                            <a href="<c:out value="${url}"/> " >
                                <c:out value="${i}" /></a>
                        </c:otherwise>   
                    </c:choose>
                </c:forEach>
                <c:if test="${pages> current}">
                    <c:url value="MaintenanceListVehicles.htm" var="nextUrl">
                        <c:param name="current" value="${current + 1}"/>                          
                    </c:url>
                    <a href="<c:out value="${nextUrl}"/>">Next</a>
                </c:if>
            </div>
        </c:when>
        <c:otherwise>
            <div align="center">
            </div>
        </c:otherwise>
    </c:choose>

真的希望别人觉得它有用!