VisualforceでコントローラーでURLパラメータを取得するには
ApexPages.currentPage().getParameters().get(param_name);
とする必要があるのですが。
できれば関数呼び出しなど行わず、最初から変数に代入されている形で取得したいです。
細かい検証はしていませんが、とりあえず実現できる方法を見つけたので紹介します。
まずapex:PageにはControllerを指定せずに、
カスタムコンポーネントを一つだけ配置し
Lightningの最上位コンポーネントと同じようにこのコンポーネントに表示内容を記述し、コントローラーもこちらに指定するようにします。
Viewでは
{!$CurrentPage.parameters.param_name}
でURLパラメータを取得することができるので、
apex:attributeを使い、URLパラメータをコンポーネントに渡し、assignTo属性でコントローラの変数に渡す事で
URLパラメータをControllerの変数に直接渡すことができます。
<apex:page > <c:〇〇Component attr_name="{!$CurrentPage.parameters.param_name}" /> </apex:page>
<apex:component controller="〇〇Controller"> <apex:attribute name="attr_name" type="ID" assignTo="{!param_name}" description="url parameter" /> <!-- 略 --> </apex:component>
public class 〇〇Controller { ID param_name{set;get;} //←URLパラメータが代入される。 }
同じことを実現したくてやってみましたが、Componentにて Error: Read only property ‘c:invoicePdfComponent.param_name’ と出てしまい保存ができません。
AssignToの問題だと思うのですが、Classでは ID param_name{get;set;}と定義しているのでどこか問題か分からず、何か原因かお分かりでしょうか。
class で変数をpublicにしたら通りました。