Visualforce添加过滤器,实现数据的筛选

参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/units/visualforce_standard_list_controllers(官方开发文档)

代码:

<apex:page sidebar="false" standardController="Contact" recordSetVar="contacts">
<apex:form>
<apex:pageBlock title="Contact List" id="contacts_list">
Filter:
<apex:selectList value="{!filterId}" size="1">
<apex:selectOptions value="{!listViewOptions}"/>
<apex:actionSupport event="onchange" reRender="contacts_list"/>
</apex:selectList>
<!--Contacts List-->
<apex:pageBlockTable value="{!contacts}" var="ct">
<apex:column value="{!ct.FirstName}"/>
<apex:column value="{!ct.LastName}"/>
<apex:column value="{!ct.Phone}"/>
<apex:column value="{!ct.Title}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>

代码解释:

  1. <apex:pageBlock title="Contact List" id="contacts_list">设置一个Id,作为标识,因为这里用的是Ajax技术进行局部实时刷新。组件和reRender的组合效果是仅更新reRender属性中命名的页面部分。 因为您向<apex:pageBlock>中添加了id =“contacts_list”,所以操作完成后,只会更新<apex:pageBlock>,而不会重新加载整个页面。
  2. 当页面加载时,<apex:selectList>构建一个可用过滤器的菜单,通过从{! listViewOptions}表达式。 listViewOptions是标准列表控制器提供的属性。
    当您从菜单中选择新选项时,onchange事件由<apex:actionSupport>组件触发。
    当onchange激发时,页面通过将新项目提交到filterId属性,在<apex:selectList>中设置,提交回选择的新列表视图。
    当属性更新时,页面从服务器获取一个新的响应,在联系人变量中有一个新的匹配记录集合。
    但是因为<apex:actionSupport>指定仅重新渲染页面的一部分,所以使用Ajax异步JavaScript来更新页面,而不是通过完整页面重新加载。

05-11 13:42