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