PageReference类 学习

PageReference类的作用

PageReference类位于Apex的System命名空间下。它可以用来在Apex代码中将页面跳转到指定的位置。在开发的时候,我们也可以向其中添加任意的参数。

页面跳转的代码示例

PageReference类可以用于多种情况。代码示例如下:

将页面跳转到一个外部URL

PageReference pageRef = new PageReference(‘http://www.baidu.com‘);

直接在初始化时提供一个外部网站的URL,则可以直接让页面跳转到外部网站。

将页面跳转到某个Account详细信息页面

Account acc = [SELECT Id FROM Account LIMIT 1];

PageReference pageRef = new PageReference(‘/‘ + acc.Id);

在上面的代码中,首先得到了某个Account记录,然后在初始化PageReference类的时候,使用“/”和记录ID的方式直接定位到该记录详细信息页面的URL。

将页面跳转到Account对象的新建页面

Schema.DescribeSObjectResult result = Account.SObjectType.getDescribe();

PageReference pageRef = new PageReference(‘/‘ + result.getKeyPrefix() + ‘/e‘);

在上面的代码中,首先使用了“Schema.DescribeSObjectResult”来得到Account对象的描述。在定义PageReference时,“getKeyPrefix()”函数和“/e”的组合默认表示新建页面的URL。

把代码中的Account换成其他的标准或自定义对象就可以跳转到相应的新建页面。

将页面跳转到某个Account记录的编辑页面

Account acc = [SELECT Id FROM Account LIMIT 1];

PageReference pageRef = new PageReference(‘/‘ + acc.Id + ‘/e‘);

在上面的代码中,在URL中添加了记录的ID和“/e”。它是默认的记录操作参数,表示进入这条记录的编辑页面。

将页面跳转到一个Visualforce页面

String vfPageName = ‘ExamplePage‘;

PageReference pageRef = new PageReference(‘/apex/‘ + vfPageName);

在Salesforce中,“/apex/Visualforce页面名称”的结构可以直接进入Visualforce页面。所以使用这种结构初始化PageReference,则可以跳转到指定的Visualforce页面。

当然,在Apex中对于跳转到某页面有另一种方法,即:

Page.vfPageName

跳转到当前页面

PageReference pageRef = ApexPages.currentPage();

页面参数的代码示例

在开发的时候,可以对目的页面的参数进行增删或修改。

得到当前页面的页面参数

假设当前页面的URL是:“/apex/examplePage?id=1234&name=abcd”,那么使用如下代码即可得到“id”和“name”的值:

// 得到页面参数,存储在一个Map<String, String>类型的变量中
Map<String, String> params = ApexPages.currentPage().getParameters();

// 得到参数“id”的值
String idValue = params.get(‘id‘);
// 或
// String idValue = ApexPages.currentPage().getParameters().get(‘id‘);

// 得到参数“name”的值
String nameValue = params.get(‘name‘);

对页面参数进行设置

因为页面的参数是由一个Map<String, String>类型的变量进行存储,所以在代码中可以直接设定需要的参数。

PageReference pageRef = new PageReference(‘/apex/examplePage‘);

Map<String, String> params  = pageRef.getParameters();

params.put(‘id‘, ‘1234‘);
params.put(‘name‘, ‘abcd‘);
params.put(‘test‘, ‘This is a test parameter‘);

特殊的页面参数

如果某页面是跳转到某条记录的新建或编辑页面,那么页面中会有“保存(Save)”按钮和“取消(Cancel)”按钮。在定义页面参数时,有几个参数与之相对应:

  • saveURL:“保存”按钮对应的跳转页面
  • cancelURl:“取消”按钮对应的跳转页面
  • retURL:在没有设定“saveURL”时,“保存”按钮对应的跳转页面。在没有设定“cancelURL”时,“取消”按钮对应的跳转页面。如果都没有设定的话,系统默认跳转到主页

比如:

Case cas = [SELECT Id, AccountId FROM Case LIMIT 1];

PageReference pageRef = new PageReference(‘/‘ + cas.Id + ‘/e‘);
params.put(‘saveURL‘, cas.AccountId);
params.put(‘retURL‘, cas.Id);
params.put(‘retURL‘, cas.AccountId);

在上面的代码中,会首先进入某条Case记录的编辑页面。当进行保存后,页面会跳转到其所属的Account记录页面。如果取消编辑,则会跳转回Case记录的页面。

原文地址:https://www.cnblogs.com/erfsfj-dbc/p/10894717.html

时间: 2024-10-18 06:44:18

PageReference类 学习的相关文章

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

【C++】Stack类与Queue类学习

1.Stack类学习 1)建立stack<string> 2)调用push函数将数据压入栈中 3)调用size函数查看当前栈内元素数量 4)调用empty函数检测栈是否为空 5)如果不为空则不断调用pop函数将元素从栈中取出(后入先出) #include <iostream> #include <stack> using namespace std; int main() {     stack<string> stkNameList;     stkNam

Spreadsheet_Excel_Reader类学习心得

一:Spreadsheet_Excel_Reader类的基本使用方法: $reader=new Spreadsheet_Excel_Reader(); $reader->setOutputEncoding("GBK"); $reader->read($fileName); $rows=$reader->sheets[2]['numRows']; $cells=$reader->sheets[2]['cells']; 二:经常使用到的一些基本函数: 1> 

Apache commons lang工具类学习笔记(2)--StringUtils

StringUtils工具类具有对String具有简单而强大的处理能力,从检查空串到分割字符串,到生成格式化的字符串,使用都很方便简洁,能减少很多代码量; 详细的使用方法可以参考下面的例子或者官方的API(http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isAlpha(java.lang.CharSequence)) packa

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Collection类学习笔记

binarySearch原理: public static index halfSearch(List<String> list, String key) { int max,min,mid; max = list.size()-1; min = 0; while(min<=max) { mid = (max+min) >>1; String str = list.get(mid); int num = str.compareTo(key); if(num > 0) m

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int