5.4.2 修改页面

当搜索结果大于20的时候,显示页面的下方,将出现页码
就好像上图这样。
接下来我们要在界面上列出页数,首先查询总数,然后根据这个总数计算页数:
//根据这个角色查询的所有结果的总数,赋值给size
int size=UserData.findUserNumberByRole(role);
//p是一共几页,先除以20,整数除法没有余数,这里得到的p可能会少了1
int p=size / 20;
//判断size除以20的余数是否等于0,不等于0表示有余数,页数要增加1
if(size%20 != 0){
    p=p+1;
}
这段代码放在表格前面任何位置都可以,但一定要在table结束前,因为table接下来要插入页码链接,需要使用到p这个值
插入这段代码:
<div>
    <%for(int n=1;n
    <=p;n++) {%>
    <a style="padding:10px" href="<%=" ?role="+role+ " &page="+n%>"><%=n %></a>
    <%} %>
</div>

如图所示:
这里解释一下:
此循环是生成表格下面的页码,n从1开始循环到p,它代表页数,同时n是链接里的文字,而链接本身是一个带role和page参数的url,href就是链接的值,注意看它是如何拼起来的,例如4的链接就是:
a的style的padding:10px表示a上下左右各填充10个像素,这样不至于每个数字都连在一起没有任何缝隙。
运行此页码的效果如图:
点击任何一个数字,都会在url上体现点击到哪一页,那就是page属性:
那么接下来,就是user.jsp取得这个page属性,然后传给新的查询函数,也就用findUsersByRolePage(String role,int from),替换原来的findUsersByRole(String role)
from值决定了查询从哪里开始,它是根据页数计算出来的:
我们取得的是页,例如第6页,每页是100,那么就是从20*5开始,所以from的值应该是(page-1)*20,最后一个要解决的就是page从request里面取值出来是字符串类型,怎么转换成int类型?使用Integer.parseInt方法,代码如下:
int page1=1;
String pTemp=request.getParameter("page");
if(pTemp != null)
    page1=Integer.parseInt(pTemp);
由于page属性不一定存在,要先取出来检查它的值不为null,然后转换成整数。而page1默认值就是1,以免pTemp为null的时候没有页面值。

尝试完成分页这个功能