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(即轉發和重定向的選擇)這兩個還是不懂原理,希望懂得大神可以留言解惑,不懂的歡迎留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM