ShowTable of Contents
カスタムコントロール
XPages で提供されているカスタムコントロールの機能は、何度も繰り返し利用するコントロールの組み合わせを
部品としてあらかじめ登録しておくものです。
それにより、XPages のページを作成する際にその部品を簡単に利用することができるようになります。
ひとつの XPages アプリケーション内で、同一のページ上にも、異なるページ上にも、
同じカスタムコントロールをいくつでも配置することができます。
スコープ変数
XPages では、サーバーサイドのアプリケーションの内部状態を保存するために、スコープ変数と
呼ばれるものが用意されています。
その有効期間に応じて applicationScope, sessionScope, viewScope, requestScope が利用可能です。
カスタムコントロール内のサーバーサイドロジックでも、これらのスコープ変数はもちろん利用可能なのですが、
これらはいずれもアプリケーション内でグローバルなため、複数の同一カスタムコントロールを同じ XPages 内に配置した場合、
いずれのカスタムコントロールのインスタンスからも、同じ変数としてアクセスされます。
(Java で言う、クラス変数のような動作です。)
でも場合によっては、同一のカスタムコントロールであっても、それぞれのインスタンスごとに違う値を
保存したい場合もあります。
(Java で言う、インスタンス変数に相当します。)
カスタムコントロールのプライベート変数
そのような場合に利用可能な変数が compositeData 変数です。
もともと compositeData 変数とは、カスタムコントロールでカスタムプロパティを定義した際に、その設定値を
ロジック内で参照するための変数です。
例えば下図のようなカスタムプロパティを定義した場合には、ロジック内で
compositeData.propSubject
とすればその値を取得することができます。
この compositeData 変数は、カスタムコントロールがインスタンス化されるごとに新しく生成されるため、
インスタンスごとのプライベート変数として利用することが可能なのです。
例えば、ロジック内で
compositeData.privateTitle = "このインスタンスのタイトルです";
とすれば、値を保存することができます。
ひとつ注意点として、この変数の有効期間が viewScope と同じものだということがあります。
つまり、同一のページ内にとどまっている限りは有効でそれまでの値を保存しているのですが、
ページを遷移してしまうと、また新たに作成されるということです。