38 JSFページでのユーザー・カスタマイズの許可

この章では、実行時に特定のUIにユーザーが行った変更をセッションの間永続させる方法について説明します。

また、変更が永続データ・リポジトリ内で永続されるようにアプリケーションを構成することもできます。そのように構成することで、アプリケーションを再度使用するときに変更内容が残っていることになります。この永続性を許可するには、完全Fusionテクノロジ・スタックの一部であるOracle Metadata Service (MDS)を使用する必要があります。MDSおよび完全Fusionスタックを使用することで、次の追加の永続性機能も提供されます。

  • 追加の属性値の永続

  • 検索条件の永続

  • UIのドラッグ・アンド・ドロップ操作の結果の永続

  • 実行時のページ上のコンポーネントの並替え

  • 実行時のページのコンポーネントおよびファセットの追加と削除

Oracle MDSの詳細と使用手順は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』「実行時のユーザーによるカスタマイズの許可」の章を参照してください。

この章の内容は次のとおりです。

ユーザー・カスタマイズについて

ADFアプリケーションのユーザーは、ADF Facesコンポーネントに対してパーソナライズの変更を加えることかできます。この変更がユーザー・セッションの間、永続するかどうかは、アプリケーションの構成によって異なります。ただし、UIの様々な側面のために、ADF Facesでは暗黙的なパーソナライズがサポートされています。

多くのADF Facesコンポーネントで、ユーザーは実行時にコンポーネントの表示を変更できます。たとえば、ユーザーは、panelSplitterコンポーネントのスプリッタの位置を変更したり、パネルに詳細コンテンツを表示するかどうかを変更できます。デフォルトでは、これらの変更はページ・リクエストの間有効です。ユーザーがページを終了して再度表示すると、コンポーネントはデフォルトの構成で表示されます。ただし、変更がユーザーのセッションの間永続するようアプリケーションを構成できます。このようにすると、ユーザーがアプリケーションを終了するまで、変更されたままになります。

表38-1に、デフォルトのパーソナライズ機能を提供するコンポーネントごとの変更を示します。

表38-1 暗黙的に永続する属性値

コンポーネント 属性 UIの特性 実行時の効果

panelBox

showDetail

showDetailHeader

showDetailItem

disclosed

コンテンツの表示または非表示

ユーザーは、ヘッダーのアイコンを使用してコンテンツを表示または非表示にできます。ユーザーの直近のアクションに基づいて、詳細コンテンツが表示または非表示になります。

showDetailItem (panelAccordionコンポーネントで使用)

flex

複数のコンポーネントの高さ

複数のshowDetailItemコンポーネントの高さは、それぞれのflex属性の相対値によって決まります。大きいflex値が設定されているshowDetailItemコンポーネントは、小さい値が設定されているコンポーネントよりも高くなります。これらの比率を変更でき、新しい値は永続します。

showDetailItem (panelAccordionコンポーネントで使用)

inflexibleHeight

パネルのサイズ

ユーザーはパネルのサイズを変更でき、そのサイズは保持されます。

panelSplitter

collapsed

スプリッタの面を閉じる

ユーザーはスプリッタのいずれかの面を閉じることができます。閉じられた状態は、ユーザーによる最終の構成として保持されます。

panelSplitter

splitterPosition

スプリッタの位置

パネルのスプリッタの位置が、ユーザーによって最後に移動された位置のままになります。

richTextEditor

editMode

選択された編集モード

エディタは、ユーザーが最後に選択したモード(WYSIWYGまたはソース)で表示されます。

calendar

activeDay

アクティブな日

現在の表示でアクティブとみなされる日は、アクティブな日のままになります。

calendar

view

アクティビティのビューの表示

現在アクティビティを表示しているビュー(日、週、月またはリスト)が保持されます。

panelWindow

dialog

contentHeight

パネル・ウィンドウまたはダイアログの高さ

ユーザーはpanelWindowまたはdialogポップアップ・コンポーネントの高さを変更でき、変更した高さが維持されます。

panelWindow

dialog

contentWidth

パネル・ウィンドウまたはダイアログの幅

ユーザーはpanelWindowまたはdialogポップアップ・コンポーネントの幅を変更でき、変更した幅が維持されます。

button

link

windowHeight

インライン・ダイアログの高さ

インライン・ポップアップ・ダイアログがADF Facesダイアトグ・フレームワークまたはADFタスクフローを使用して起動された場合、ユーザーが手動でダイアログのサイズを変更すると、ダイアログを起動したコマンド・コンポーネント上の関連のwindowHeight値も変更され、保持されます。この機能は、インライン・ダイアログにのみ適用され、ブラウザ・ウィンドウ・ダイアログには適用されません。

button

link

windowWidth

インライン・ダイアログの幅

インライン・ポップアップ・ダイアログがADF Facesダイアトグ・フレームワークまたはADFタスクフローを使用して起動された場合、ユーザーが手動でダイアログのサイズを変更すると、ダイアログを起動したコマンド・コンポーネント上の関連のwindowWidth値も変更され、保持されます。この機能は、インライン・ダイアログにのみ適用され、ブラウザ・ウィンドウ・ダイアログには適用されません。

column

displayIndex

列の順序の変更

ADF Facesの列は、ユーザーが実行時に並べ替えることができます。displayIndex属性によって、列の順序が決まります。(デフォルトでは、各列の値は-1に設定され、データ・ソースと同じ順序で列が表示されます)。ユーザーが列を移動すると、新しい順序を反映するよう各列の値が変更されます。これらの新しい値は永続します。

column

frozen

列のスクロールの可否

ADF Facesの列は、スクロールされないように固定できます。列のfrozen属性をtrueに設定すると、その列の前のすべての列(displayIndex値に基づく)がスクロールしません。panelCollectionコンポーネントで表を使用する場合、ユーザーが列を固定できるボタンが表示されるようにその表を構成できます。詳細は、「ページへの表の表示方法」を参照してください。

column

noWrap

列のテキストをラップするかどうか

列のコンテンツを折り返すかどうかを指定します。ユーザーがこの属性値を変更できるようにするコードを作成する必要があります。たとえば、ユーザーが値をtrueからfalseに切り替えることができるポップアップ・メニューを作成します。

column

selected

選択した列

選択された列は、ユーザーが最後に選択した列に基づきます。

column

visible

列を表示するかどうか

ユーザーの直近のアクションに基づいて、列が表示または非表示になります。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。たとえば、ユーザーが値をtrueからfalseに切り替えることができるポップアップ・メニューを作成します。

column

width

列幅

列の幅が、ユーザーが最後に設定したサイズのままになります。

table

filterVisible

フィルタの表示または非表示

ADF Facesの表には、ユーザーが属性値で表の行をフィルタ処理できるコンポーネントを含めることができます。フィルタを使用するよう構成されている表では、ユーザーの直近のアクションに基づいて、フィルタは表示または非表示になります。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。たとえば、ユーザーが値をtrueからfalseに切り替えることができるボタンを作成します。

dvt:areaGraph

dvt:barGraph

dvt:bubbleGraph

dvt:comboGraph

dvt:horizontal BarGraph

dvt:lineGraph

dvt:scatterGraph

timeRangeMode

グラフの時間軸にデータを表示する時間範囲のモード

グラフの時間軸上に表示されるデータの時間範囲は、すべてのデータ視覚化グラフ・コンポーネントに指定できます。デフォルトでは、すべてのデータが表示されます。時間範囲は、最後または最初のデータ・ポイントからの相対的時間範囲、または明示的時間範囲にも設定できます。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。たとえば、グラフの時間範囲を選択するためのドロップダウン・リストを作成できます。

dvt:ganttLegend

visible

ガント・チャートの凡例の表示または非表示

データ視覚化プロジェクトの凡例、リソース使用率およびスケジュール・ガント・チャート・コンポーネントは、情報パネル内で表示されるかされないかのいずれかです。ユーザーがこの属性値を変更できるように(汎用を表示するための非表示および表示のボタン)コードを記述することが必要になります。

dvt:hierarchyViewer

layout

階層ビューアのレイアウト・オプション

データ視覚化階層ビューア・コンポーネントでは、上から下への垂直、ツリー、円、放射など、9つの階層レイアウト・オプションをサポートしています。ユーザーは、マップ・コントロール・パネルでレイアウトを変更でき、最後に選択されたレイアウトが保持されます。

dvt:map

mapZoom

マップのズーム・レベル

このデータ視覚化地理マップ・コンポーネント属性では、マップの初期ズーム・レベルを指定します。ズーム・レベルは、ベース・マップの一部としてマップ・キャッシュ・インスタンスで定義されます。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。

dvt:map

srid

マップの空間参照ID

このデータ視覚化地理マップコンポーネント属性では、startingXおよびstartingYによって定義されるマップの中心位置や、点テーマのすべての点を含む、マップの全座標のsrid(空間参照ID)を指定します。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。

dvt:map

startingXstartingY

マップのX座標およびY座標

このデータ視覚化地理マップ・コンポーネント属性では、マップの中心位置のXおよびY座標を指定します。座標のsridはsrid属性で指定します。srid属性が指定されていない場合、その値はマップの中心位置の経度であると想定されます。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。

dvt:projectGantt

dvt:resource UtilizationGantt

dvt:schedulingGantt

splitterPosition

ガント・チャートのスプリッタの位置

パネルのスプリッタの位置が、ユーザーによって最後に移動された位置のままになります。

dvt:timeAxis

scale

ガント・チャートの時間軸

プロジェクト、リソース使用率およびスケジュールのガント・チャートのデータ視覚化コンポーネントでは、ガント・チャートの主時間軸および副時間軸の指定にこのファセットを使用します。タイム・スケール(twoyearsyearhalfyearsquarterstwomonthsmonthsweekstwoweeksdayssixhoursthreehourshourshalfhoursquarterhours)は、ユーザーがメニュー・バーの「表示」メニューを使用することで設定でき、その選択は保持されます。このコンポーネント値には、カスタム・タイム・スケールも指定できます。

dvt:timeSelector

explicitStartexplicitEnd

グラフの開始日と終了日

データ視覚化の面、棒、コンボ、折れ線、散布およびバブルの各グラフ・コンポーネントでは、この子タグ属性を使用して、タイム・セレクタの開始および終了日付を明示的に指定します。この属性では、値バインディングのみがサポートされています。ユーザーがこの属性値を変更できるようにするコードを記述する必要があります。

dvt:treeMap

layout

ツリーマップ階層のレイアウト・オプション

データ視覚化のツリーマップ・コンポーネントは、正方形(可能なかぎり正方形となるように配置されるノード)および水平または垂直のスライスとダイス(最初にツリーマップの幅方向に沿い水平または垂直に配置され、次いでツリーマップの高さ方向に水平または垂直に配置されるノード)を含む、3つの階層レイアウト・オプションをサポートしています。ユーザーがこのレイアウトを変更できるようにするコードを記述する必要があります。

ユーザー・カスタマイズのユースケースおよび例

アプリケーションは、表38-1に示した属性の値をユーザー・セッション中ずっと保持できるように構成できます。たとえば、アプリケーションに表が含まれており、ユーザーが列の幅をコンテンツが1行ですべて表示されるように調整するとします。セッションの変更永続性を使用するようにアプリケーションを構成すると、ユーザーがそのページから去り、次に戻ったときに、列の幅は以前の設定のままで開かれます。

注意:

追加機能の場合、変更が永続データ・リポジトリで保持されるようにアプリケーションを構成でき、その結果、変更はそのユーザーに対して複数のセッションにわたり持続します。この永続的な持続性を可能にするには、フルFusionテクノロジ・スタックを使用する必要があります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』「実行時でのユーザー・カスタマイズの許可」の章を参照してください。

セッション変更永続性の実装

ADFアプリケーションのユーザーが実行するユーザー・インタフェースのカスタマイズが永続するかどうかは、web.xmlの構成設定によって決まります。この設定が有効な場合、ユーザーのセッション中であれば、ユーザー・インタフェースが変わってもADF Facesが維持されます。

ユーザーによるセッションへの変更をアプリケーションで永続させるには、カスタマイズが有効になるようプロジェクトを構成する必要があります。

セッション変更永続性の実装方法

web.xmlファイルでのカスタマイズが有効になるようアプリケーションを構成します。

セッション変更永続性を実装する手順:

  1. 「アプリケーション」ウィンドウで、Webプロジェクトをダブルクリックします。
  2. 「プロジェクト・プロパティ」ダイアログで、「ADFビュー」ノードを選択します。
  3. 「ADFビュー」ページで、「ユーザー・カスタマイズの有効化」チェック・ボックスをアクティブにし、「セッションの継続時間」ラジオ・ボタンを選択して、「OK」をクリックします

変更永続性を使用するようアプリケーションを構成する場合の処理

セッションへの変更を保存するよう選択すると、JDeveloperでCHANGE_PERSISTENCEコンテキスト・パラメータがweb.xmlファイルに追加され、値がsessionに設定されます。このコンテキスト・パラメータでは、永続性の処理に使用されるChangeManagerクラスが登録されます。次の例に、web.xmlファイルのコンテキスト・パラメータを示します。

<context-param>
  <param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
  <param-value>session</param-value>
</context-param>

実行時の処理: 変更をどのように永続させるか

セッションへの変更を永続させるようアプリケーションを構成している場合、ビューIDに従って索引付けされたデータ構造内のセッション変数に変更が記録されます。RENDER_RESPONSE JSFフェーズが開始する前に、指定されたコンポーネントに対する変更がタグ・アクション・クラスで検索され、追加されたときと同じ順序で変更が適用されます。つまり、セッションの間に登録された変更は、同じセッションの後続のリクエストでのみ適用されます。

テンプレートおよび領域での変更永続性の使用に関する必知事項

セッション永続性を使用すると、変更は特定のセッションのviewIdに対して、コンポーネントで記録されリストアされます。その結果、その変更がフラグメントまたはページのテンプレートに属するコンポーネントで適用されると、ページでそのフラグメントまたはテンプレートが使用される範囲でのみ適用されます。そのフラグメントまたはテンプレートが使用されるすべてのページに及ぶわけではありません。たとえば、プロジェクトにpageOne.jsfおよびpageTwo.jsf JSFページがあり、どちらにもregion.jsffページ・フラグメントで定義されているフラグメントが含まれていて、さらにはshowDetailコンポーネントが含まれているとします。pageOne.jsf JSFページがレンダリングされ、showDetailコンポーネント上のdisclosed属性が変更されると、暗黙的な属性変更が記録され、pageOne.jsfページに対してのみ適用されます。ユーザーがpageTwo.jsfページに移動した場合、属性の変更は適用されません。