• 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(即转发和重定向的选择)这两个还是不懂原理,希望懂得大神可以留言解惑,不懂的欢迎留言。

  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/6225287.html
Copyright © 2020-2023  润新知