Salesforce控制器

导航:

1.标准控制器
2.自定义控制器
3.创建一个控制器扩展

标准控制器

操作方法可以从页面标记调用使用{!}符号的action参数的标签。

  • apex:commandButton 创建调用操作的按钮
  • apex:commandLink 创建调用操作的链接
  • apex:actionPoller 定期调用操作
  • apex:actionSupport 使另一个命名组件上的事件(如“onclick”、“onmouseover”等)调用操作
  • apex:actionFunction 定义一个调用动作的新JavaScript函数
  • apex:page 加载页时调用操作

下表描述了操作方法所支持的所有标准控制器。你可以把这些行为与任何Visualforce组件包括一个action属性

ActionDescription
save插入新记录或更新现有记录(如果它当前在上下文中)。此操作完成后,save操作将用户返回到原始页面(如果已知),或将用户导航到已保存记录的详细信息页面.
quicksave插入新记录或更新现有记录(如果它当前在上下文中)。与保存操作不同,此页面不会将用户重定向到其他页面.
edit将用户导航到当前位于上下文中的记录的编辑页。此操作完成后,编辑操作将用户返回到用户最初调用该操作的页面.
delete删除当前在内容中的记录。此操作完成后,delete操作刷新页面或将用户发送到关联对象的选项卡.
cancel中止编辑操作。此操作完成后,取消操作将用户返回到用户最初调用编辑的页面.
list返回标准列表页的PageReference对象,基于该对象最近使用的列表筛选器。例如,如果标准控制器是contact,并且用户查看的上一次筛选列表是上周新建的,则会显示上周创建的联系人.

例如,下面的页面允许你更新一个account。当你点击Save,保存操作将会被触发在标准控制器当中,并且这个account将会被更新。

<apex:page standardController="Account">
  <apex:form>
    <apex:pageBlock title="My Content" mode="edit">
      <apex:pageBlockButtons>
        <apex:commandButton action="{!save}" value="Save"/>
      </apex:pageBlockButtons>
      <apex:pageBlockSection title="My Content Section" columns="2">
        <apex:inputField value="{!account.name}"/>
        <apex:inputField value="{!account.site}"/>
        <apex:inputField value="{!account.type}"/>
        <apex:inputField value="{!account.accountNumber}"/>
      </apex:pageBlockSection>
    </apex:pageBlock>
  </apex:form>
</apex:page>

自定义控制器

1.自定义控制器和控制器扩展

标准控制器能够为visualforce 页面提供所有的你需要的功能,因为它们作用于一个标准页面时包括了相同的逻辑。例如,如果你使用标准Accounts 控制器时,在一个Visualforce页面点击Save按钮和在一个标准的Account中编辑页面保存的结果在操作上完全一致。

然而,如果你想要取覆盖一个已经存在的功能,通过一个应用自定义导航,使用图表或者Web服务,或者如果你需要细粒度控制哪些信息需要被关联到你的页面,你能写一个自定义控制器或者一个控制器扩展用Apex:

2.什么是自定义控制器和控制器扩展?

一个自定义控制器是一个Apex类实现的所有逻辑页面没有利用标准控制器。使用自定义控制器当你希望Visualforce页面完全在系统运行模式,不执行当前用户的权限和字段级安全。
一个控制器扩展是一个Apex类,它扩展了标准或自定义控制器的功能。使用控制器扩展时:

  • 你想利用一个标准的内置功能控制器但覆盖一个或多个操作,如编辑、视图,保存或删除。
  • 你想要去添加一个新的操作。
  • 你想要遵从用户的权限去建立一个Visualforce 页面。相反,它在用户模式下执行,其中应用当前用户的权限、字段级安全性和共享规则。

3.创建一个自定义控制器

一个自定义控制是一个Apex类,为外部、顶层类使用默认、无构造参数。你不能创建一个包含参数的自定义构造控制器。

1.在设置中,在Quick Find box中进入Apex Classes,然后选择Apex Classes
2.点击New
3.单击版本设置以指定Apex的版本和用于此类的API。如果您的组织已从AppExchange安装了托管包,则还可以指定要与此类一起使用的每个托管包的版本。对所有版本使用默认值。这将类与Apex和API的最新版本以及每个托管包相关联。如果要访问与最新包版本不同的组件或功能,可以指定托管包的旧版本。您可以指定Apex的旧版本和API来维护特定的行为。
4.在类编辑器中,输入类的Apex代码。单个类的长度可以高达100万个字符,不包括注释、测试方法或使用@isTest定义的类。
5.单击“保存”保存更改并返回“类详细信息”屏幕,或单击“快速保存”保存更改并继续编辑类。在保存类之前,Apex类必须正确编译。

案例:

下面是一个自定义控制器的简单案例:

public class MyController {

    private final Account account;

    public MyController() {
        account = [SELECT Id, Name, Site FROM Account 
                   WHERE Id = :ApexPages.currentPage().getParameters().get('id')];
    }

    public Account getAccount() {
        return account;
    }

    public PageReference save() {
        update account;
        return null;
    }
}

下面的Visualforce标记显示了如何在页面中使用上面的自定义控制器:

<apex:page controller="myController" tabStyle="Account">
    <apex:form>
        <apex:pageBlock title="Congratulations {!$User.FirstName}">
            You belong to Account Name: <apex:inputField value="{!account.name}"/>
            <apex:commandButton action="{!save}" value="save"/>
        </apex:pageBlock>
    </apex:form>
</apex:page>

创建一个控制器扩展

控制器扩展是任何包含构造函数的Apex类,该构造函数只接受一个类型的参数ApexPages.standard控制器或CustomControllerName,其中CustomControllerName是要扩展的自定义控制器的名称。

下面是一个控制器扩展的简单案例:

public class myControllerExtension {

    private final Account acct;
    
    // The extension constructor initializes the private member
    // variable acct by using the getRecord method from the standard
    // controller.
    public myControllerExtension(ApexPages.StandardController stdController) {
        this.acct = (Account)stdController.getRecord();
    }

    public String getGreeting() {
        return 'Hello ' + acct.name + ' (' + acct.id + ')';
    }
}

下面的Visualforce标记显示了如何在页面中使用上面的控制器扩展:

<apex:page standardController="Account" extensions="myControllerExtension">
    {!greeting} <p/>
    <apex:form>
        <apex:inputField value="{!account.name}"/> <p/>
        <apex:commandButton value="Save" action="{!save}"/>
    </apex:form>
</apex:page>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值