salesforce 零基础学习(五十九)apex:param使用以及相关的疑惑

做web项目难免要从一个页面传参数,解析参数中的值进行相关处理以后跳转到其他页面,VF中也不例外。使用传参的标签为apex:param。

 apex:param标签不可以单独使用,需要作为子标签嵌套在相关父标签内,可以使用此标签的标签如下:

apex:param主要有两个用法:

    • 对文本进行相关格式转换
    • 传递参数 

一.对文本进行相关格式转换:此种方式主要是apex:outputText的value支持和java中的MessageFormat同样的语法。

java api 的MessageFormat类:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/text/MessageFormat.html

MessageFormat可以使用以下形式的模式:

通过api我们可以看出如果使用MessageFormat可以使用三种方式:

{i};{i,type};{i,type,style}

demo举例:

 1 <apex:page >
 2     <apex:pageBlock title="param 的format用法">
 3         <div >
 4             对日期类型进行格式转换输入:<br/>
 5             转换前的日期格式:
 6             <apex:outputText value="{!NOW()}"/><br/>
 7             转换后的日期格式:
 8             <apex:outputText value="{0,date,YYYY-MM-dd HH:mm:ss}">
 9                 <apex:param value="{!NOW()}"/>
10             </apex:outputText>
11         </div>
12         <div>
13             对普通类型进行相关规则的关联:eg: 用户名  -  别名<br/>
14             <apex:outputText value="{0} - {1}">
15                 <apex:param value="{!$User.Username}"/>
16                 <apex:param value="{!$User.Alias}"/>
17             </apex:outputText>
18         </div>
19         <div>
20             对number类型进行相关操作:
21             <apex:outputText value="{0,number,000,000,000.00}">
22                 <apex:param value="{!NOW() - $System.OriginDateTime}"/>
23             </apex:outputText>
24         </div>
25     </apex:pageBlock>
26 </apex:page>

显示效果:

二.传递参数

 传递参数主要以apex:commandButton进行介绍。此标签绑定一个action,设置value以后便可访问controller层中的相关方法,通过apex:param作为子标签便可以在此方法中设置相关参数:

错误demo:

TestActionFunctionController层:

 1 public with sharing class TestActionFunctionController {
 2     public String param{get;set;}
 3     
 4     public PageReference redirectToBlankPage() {
 5         system.debug('=============param : ' + param);
 6         PageReference ref = new PageReference('/apex/detailGoodsTotal');
 7         //ref.setRedirect(true);
 8         //return ref;
 9         return Page.detailGoodsTotal;
10     }
11 }

 Page页--TestActionFunctionPage:此页面用于显示跳转按钮

1 <apex:page controller="TestActionFunctionController">
2 <apex:form >
3     <apex:commandButton action="{!redirectToBlankPage}" value="通过commandButton赋值param并跳转到空白页">
4         <apex:param name="param" value="test param2" assignTo="{!param}"/>
5     </apex:commandButton>
6 </apex:form>
7 </apex:page>

Page页--detailGoodsTotal.page:空白跳转页

1 <apex:page controller="TestActionFunctionController">
2 blank page
3 </apex:page>

此种方式出现两个问题:

 首先:param传递到后台是null。此种方式原因为为commandButton没有添加reRender属性,只需要添加reRender属性即可

正确的Page页--TestActionFunctionPage

1 <apex:page controller="TestActionFunctionController">
2 <apex:form >
3     <apex:commandButton action="{!redirectToBlankPage}" value="通过commandButton赋值param并跳转到空白页" reRender="x">
4         <apex:param name="param" value="test param2" assignTo="{!param}"/>
5     </apex:commandButton>
6     <apex:pageBlock id="x" rendered="false"></apex:pageBlock>
7 </apex:form>
8 </apex:page>

第二个问题:

此种方式原因为两个Page共用了一个Controller,如果跳转时需要重定向,即设置pageRef.setRedirect(true);

正确的Controller:

 1 public with sharing class TestActionFunctionController {
 2     public String param{get;set;}
 3     
 4     public PageReference redirectToBlankPage() {
 5         system.debug('=============param : ' + param);
 6         PageReference ref = new PageReference('/apex/detailGoodsTotal');
 7         ref.setRedirect(true);
 8         return ref;
 9     }
10 }

总结:此篇主要讲了apex:param的相关使用方法以及碰到的一点问题,至于为什么用reRender和为什么setRedirect(即转发和重定向的选择)这两个还是不懂原理,希望懂得大神可以留言解惑,不懂的欢迎留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

配置文件热加载的go语言实现

通常我们更新应用程序的配置文件,都需要手动重启程序或手动重新加载配置。假设一组服务部署在10台机器上,你需要借助批量运维工具执行重启命令,而且10台同时重启可能...

5235
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Ansible部署多个PHP应用程序

本教程是关于在Ubuntu 14.04上使用Ansible部署PHP应用程序的系列文章中的第三篇。第一个教程涵盖了部署应用程序的基本步骤; 在第二个教程介绍更高...

930
来自专栏程序你好

如何用7个简单的步骤,在Firefox开发工具中调试JavaScript

本文将着重于在Firefox的开发工具中调试JavaScript代码。Firefox中的开发工具是一个非常强大的工具,可以加速您的bug查找和修复过程!

1066
来自专栏前端杂谈

使用vue开发项目需要注意的问题和可能踩到的坑

最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下:

1012
来自专栏数据结构笔记

Django搭建博客(四):渲染前数据的处理

一个简单得方法就是不直接在模板里使用 date属性,而是使用date属性的year 、month 和 day属性来拼凑我们所需的日期格式。

1032
来自专栏小白客

Python爬虫学习--用爬虫抓取糗事百科的笑料

构造一个爬虫需要以下四个步骤:分析目标、下载页面、解析页面、存储内容,其中存储内容暂且不提。(因为我还没学) ◆ 分析目标:我的目标是抓取糗事百科24小时热门笑...

3627
来自专栏计算机编程

Vue 单文件组件详解<1>--简单上手

vue 的webpack的结构非常简单,简单的一眼就可以知道每个目录下是干啥的,在components目录下就有属于我们想要详细解析的内容,这两个vue文件即为...

791
来自专栏ionic3+

【Appetite】ionic3实录(七)次页实现及分析解决问题【下】

一般一些js插件,是依托dom的。我们观察initSwiper方法,第一个参数'.wheel .swiper-container'其实是个选择器,所以它也是依托...

712
来自专栏有趣的django

Django搭建blog网站(一)

一、前言 1.1.环境 python版本:3.6 Django版本:1.11.6 1.2.预览效果 最终搭建的blog的样子,基本上满足需求了。框架搭好了,至于...

6738
来自专栏微信终端开发团队的专栏

XCode基本使用及调试技巧

对于初学iOS开发的同学,了解了Objective-C的基本使用后,最关心的应该是如何把OC程序运行起来。由于Xcode的基本使用比较简单,所以本文着重介绍一些...

5557

扫码关注云+社区