当加载页面时,
<apex:selectList>
通过从
{! listViewOptions }
表达式获取列表,创建可用筛选器菜单。
listViewOptions
是标准列表控制器提供的属性。
当您从菜单中选择一个新选项时,
<apex:actionSupport>
组件会触发
onchange
事件。
当
onchange
触发时,页面通过将新项目提交给
<apex:selectList>
中设置的
filterId
属性的方式,提交已选择的新列表视图。
当属性更新时,页面从服务器获得新的响应,在 contacts 变量中会有一个新的匹配记录集合。
由于
<apex:actionSupport>
指定只重新渲染页面的一部分,页面是使用 Ajax(异步 JavaScript)更新的,而不是通过重新加载整个页面的方式。
最终结果是,只需添加几行标记,即可实现错综复杂的行为。
使用标准列表控制器的分页特性,允许用户单次查看一页长的记录列表。
到目前为止,您开发的功能非常好,并且适用于在 Developer Edition 组织中作为样例数据提供简短记录列表。但是,当您拥有一个真正的组织,组织内有着数百或数千甚至数百万条记录时会发生什么?在单页上查看所有记录,效果并不好!
事实上,标准列表控制器默认情况下只显示符合筛选条件的前 20条记录(如果有的话)。如何让用户访问超出前 20 条的记录,或者每页记录超过 20 条?
分页可以解决这个问题。这是一个标准的 Web 应用程序用户界面元素,通常使用
下一页
和
上一页
链接,实现在单页的一长串记录中向前或向后移动。您可以使用标准列表控制器将其添加到您的页面中,还可以使用进度指示器和菜单来更改每页记录的数量。
在
</apex:pageBlockTable>
联系人列表下方,添加以下标记。
<!-- Pagination -->
<table style="width: 100%"><tr>
<!-- Page X of Y -->
<td align="center">
<!-- Previous page -->
<!-- Next page -->
<td align="right">
<!-- Records per page -->
</tr></table>
这将创建一个 HTML 表格,其中包含您要添加的三个分页控件。
在真实页面中,您可能会使用更多带有单独样式的语义标记,但就目前而言,纯 HTML 很简洁,且简单易用。
将
<!-- Page X of Y -->
注释行替换为以下标记。
Page: <apex:outputText
value=" {!PageNumber} of {! CEILING(ResultSize / PageSize) }"/>
这会向列表中添加一个进度指示器,指示用户正在查看哪个页面以及剩下多少页面。如果您在 DE 组织中尝试此操作,它可能会显示“Page 1 of 1”(第 1 页,共 1 页)。
将
<!-- Previous page -->
和
<!-- Next page -->
注释行替换为以下标记。
<!-- Previous page -->
<!-- active -->
<apex:commandLink action="{! Previous }" value="« Previous"
rendered="{! HasPrevious }"/>
<!-- inactive (no earlier pages) -->
<apex:outputText style="color: #ccc;" value="« Previous"
rendered="{! NOT(HasPrevious) }"/>
<!-- Next page -->
<!-- active -->
<apex:commandLink action="{! Next }" value="Next »"
rendered="{! HasNext }"/>
<!-- inactive (no more pages) -->
<apex:outputText style="color: #ccc;" value="Next »"
rendered="{! NOT(HasNext) }"/>
该标记在页面上提供
上一页
和
下一页
链接。标记包含两种可能性:当给定方向有更多记录要查看时,链接处于活动状态;当给定方向没有更多页面时,链接处于禁用状态。
将
<!-- Records per page -->
注释行替换为以下标记。
Records per page:
<apex:selectList value="{! PageSize }" size="1">
<apex:selectOption itemValue="5" itemLabel="5"/>
<apex:selectOption itemValue="20" itemLabel="20"/>
<apex:actionSupport event="onchange" reRender="contacts_list"/>
</apex:selectList>
此标记提供用于更改每页记录数的菜单。在这里,我们只添加了一个选项以在页面上显示少量记录。从列表中选择“5”,看看列表和其他控件会发生什么。