tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:<apex:commandButton> と <apex:param>

<apex:commandButton>でaction処理を実行するときに、

<apex:param>で引数を渡す方法についてです。

 

<apex:param>を使う場合はPage側で次のように書きます。

<apex:commandButton value="commandButtonから実行" action="{!doClick}" rerender="formId">
    <apex:param name="parameter" value="commandButtonから実行"/>
</apex:commandButton>

apex:paramのvalueに指定した値が引数の値になります。

 

Controller側は次のようになります。

String parameter = System.currentPageReference().getParameters().get('parameter');

 

URLパラメータを取得する感じの処理で引数を受け取れます。

 


 検証用のサンプル画面を作ってみました。

f:id:tyoshikawa1106:20121220001935p:plain

 

3つのボタンで次の処理を実行します。

1. commandButtonから実行

commandButtonのaction処理を実行時に、
apex:paramでパラメータを渡す処理を実行しています。
 
2. actionFunctionから実行①
commandButtonからonClickイベントでjavascriptを呼び出し、
actionFunctionからaction処理を実行時に、
apex:paramでパラメータを渡す処理を実行しています。
 
3. actionFunctionから実行②
commandButtonからonClickイベントでjavascriptを呼び出す際に
引数を渡します。
この引数をapex:paramのパラメータとして使用して
処理を実行しています。
 
コードは次のようになっています。
Page
<apex:page Controller="CommondButtonParameterController">
    <apex:sectionHeader title="Force.com" subTitle="ボタン処理・パラメータ渡しサンプル" />
    <apex:form id="formId">
        <apex:actionFunction name="actionFunction1" action="{!doClick}" rerender="formId">
            <apex:param name="parameter" value="actionFunctionから実行"/>
        </apex:actionFunction>
        <apex:actionFunction name="actionFunction2" action="{!doClick}" rerender="formId">
            <apex:param name="parameter" value=""/>
        </apex:actionFunction>
        <apex:pageBlock >
            <apex:commandButton value="commandButtonから実行" action="{!doClick}" rerender="formId">
                <apex:param name="parameter" value="commandButtonから実行"/>
            </apex:commandButton>
            &nbsp;&nbsp;
            <apex:commandButton value="actionFunctionから実行①" onClick="return btnClick1();" />
            &nbsp;&nbsp;
            <apex:commandButton value="actionFunctionから実行②" onClick="return btnClick2('javascriptから引数を受け取りました。');"  />
        </apex:pageBlock>
        <apex:pageMessages />
    </apex:form>
    <script>
        function btnClick1() {
            alert('click!!');
            actionFunction1();
            return false;
        }
        
        function btnClick2(prm) {
            alert('引数:' + prm);
            actionFunction2(prm);
            return false;
        }
    </script>
</apex:page>
 
Controller
public with sharing class CommondButtonParameterController {
    
    public void doClick() {
        String parameter = System.currentPageReference().getParameters().get('parameter');
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, parameter));
    }

}
 
こんな感じのソースで検証してみました。