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(即转发和重定向的选择)这两个还是不懂原理,希望懂得大神可以留言解惑,不懂的欢迎留言。
作者:zero
博客地址:http://www.cnblogs.com/zero-zyq/
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
如果文章的内容对你有帮助,欢迎点赞~
为方便手机端查看博客,现正在将博客迁移至微信公众号:Salesforce零基础学习,欢迎各位关注。