ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

9.Visualforce 自定义控制器(Custom Controllers)

2022-05-08 18:01:17  阅读:158  来源: 互联网

标签:控制器 自定义 操作方法 Controllers sortOrder Visualforce 页面


1.自定义控制器简介

自定义控制器包含可在 Visualforce 页面使用的自定义逻辑和数据操作。例如,自定义控制器可以检索要显示的项目列表、调用外部 Web 服务、验证和插入数据等等 — 所有这些操作都将对使用它作为控制器的 Visualforce 页面可用。
控制器通常检索要在 Visualforce 页面中显示的数据,并包含响应页面操作(如单击按钮)的代码。

毕竟众口难调,并非所有 Web 应用程序都是标准的。当想要覆盖现有功能、通过应用程序自定义导航、使用调用或 Web 服务,或者需要更好地控制访问页面信息的方式时,借助 Visualforce,这一切都游刃有余。可以使用 Apex 编写自定义控制器,并从头到尾完全控制应用程序的逻辑。

2.创建使用自定义控制器的 Visualforce 页面

通过在 <apex:page> controller 属性中引用控制器类的名称,将自定义控制器添加到 Visualforce 页面。
当页面使用了自定义控制器时,不能再使用标准控制器。页面使用不同的属性来设置自定义控制器。

apex:

public class ContactsListWithController {
    private String sortOrder = 'LastName';
    public List<Contact> getContacts() {
        List<Contact> results = Database.query(
            'SELECT Id, FirstName, LastName, Title, Email ' +
            'FROM Contact ' +
            'ORDER BY ' + sortOrder + ' ASC ' +
            'LIMIT 10'
        );
        return results;
    }
    public void sortByLastName() {
        this.sortOrder = 'LastName';
    }
    public void sortByFirstName() {
        this.sortOrder = 'FirstName';
    }
}

Visualforce page:

 

<apex:page controller="ContactsListWithController">
    <apex:form>
        <apex:pageBlock title="Contacts List" id="contacts_list">
            <!-- Contacts List -->
            <apex:pageBlockTable value="{! contacts }" var="ct">
                <apex:column value="{! ct.FirstName }"/>
                <apex:column value="{! ct.LastName }"/>
                <apex:column value="{! ct.Title }"/>
                <apex:column value="{! ct.Email }"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

代码解析:

 

在该页面上,Visualforce 将表达式转换为对控制器的 getContacts() 方法的调用。该方法返回联系人记录列表,这正符合 <apex:pageBlockTable> 的预期。

 

getContacts() 方法称为 getter 方法,这是一种通用模式,其中 Visualforce 标记中的 {! someExpression } 自动连接到控制器中名为 getSomeExpression() 的方法。这是页面访问需要显示的数据的最简单方法。

 

预览结果:

 

 3.在自定义控制器中创建操作方法以响应页面上的用户输入

显示数据固然重要,但对任何网页应用来说,响应用户行为都是必不可少的。借助自定义控制器,可以通过编写操作方法来响应用户活动,在页面上创建大量的自定义操作。

Visualforce page:

 

<apex:page controller="ContactsListWithController">
    <apex:form>
        <apex:pageBlock title="Contacts List" id="contacts_list">
            <!-- Contacts List -->
            <apex:pageBlockTable value="{! contacts }" var="ct">
                <apex:column value="{! ct.FirstName }">
                    <apex:facet name="header">
                        <apex:commandLink action="{! sortByFirstName }"
                            reRender="contacts_list">First Name
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
                <apex:column value="{! ct.LastName }">
                    <apex:facet name="header">
                        <apex:commandLink action="{! sortByLastName }"
                            reRender="contacts_list">Last Name
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
                <apex:column value="{! ct.Title }"/>
                <apex:column value="{! ct.Email }"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

预览结果:通过点击FirstName,LastName来实现排序

 

 代码分析:

新标记向每个 <apex:column> 组件添加了两个嵌套组件。<apex:column> 本身有一个纯文本标题,但我们想让标题变成可点击的效果。

<apex:facet> 允许我们自定义列标题的内容。我们想要的是一个调用正确操作方法的链接。链接是使用 <apex:commandLink> 组件创建的,将 action 属性设置为引用控制器中操作方法的表达式。

(请注意,与 getter 方法相比,操作方法名称与引用操作方法的表达式相同。)

单击链接会触发控制器中的操作方法。操作方法更改私有变量的排序,然后重新显示表。重新显示表时,会重新评估 {! contacts },通过刚设置的排序重新运行查询。最终结果是按照用户点击请求的顺序重新排列表格。

 

标签:控制器,自定义,操作方法,Controllers,sortOrder,Visualforce,页面
来源: https://www.cnblogs.com/kousaimiao/p/16246265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有