<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パラメータを取得する感じの処理で引数を受け取れます。
検証用のサンプル画面を作ってみました。
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> <apex:commandButton value="actionFunctionから実行①" onClick="return btnClick1();" /> <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)); } }
こんな感じのソースで検証してみました。