| Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド 11gリリース1(11.1.1) B52029-02 |
|
![]() 戻る |
![]() 次へ |
この付録では、JSFおよびADF Facesの機能を各種XML構成ファイルで構成する方法、RequestContext APIを使用してADF Faces構成値を取得する方法、およびJavaScriptのパーティション化の使用方法について説明します。
この章に含まれる項は次のとおりです。
JSF Webアプリケーションには、特定の構成ファイルのセット(web.xmlおよびfaces-config.xml)が必要です。ADFアプリケーションでは、構成情報がadf-config.xmlファイルおよびadf-settings.xmlファイルにも格納されます。ADF FacesはMyFaces Trinidadと同じコード・ベースを共有するため、UIにADF Facesコンポーネントを使用するJSFアプリケーションでは、trinidad-config.xmlファイル(オプションでtrinidad-skins.xmlファイル)も含める必要があります。TrinidadとADF Facesとの関係の詳細は、第1章「ADF Facesリッチ・クライアントの概要」を参照してください。
JSFアプリケーションの構成の一部は、Java EEアプリケーション・デプロイメント・ディスクリプタ(web.xml)の内容で決まります。/WEB-INFディレクトリにあるweb.xmlファイルでは、サーバーが認識する必要のあるアプリケーションに関するすべての情報(JDeveloperで自動的に割り当てられる、あるいはアプリケーションのデプロイ時にシステム管理者によって割り当てられるルート・コンテキスト・パス以外)を定義する必要があります。web.xmlファイルでの典型的なランタイム設定には、初期化パラメータ、カスタム・タグ・ライブラリの場所およびセキュリティ設定があります。
ADF Facesを使用するすべてのアプリケーションに対する次の設定がweb.xmlファイルで構成されます。
clientに設定されたjavax.faces.STATE_SAVING_METHODコンテキスト・パラメータ
MyFaces Trinidadフィルタおよびマッピング
MyFacesTrinidadリソース・サーブレットおよびマッピング
JSFサーブレットおよびマッピング
|
注意: ADF Facesコンポーネントをアプリケーションで最初に使用した際に、JDeveloperで、必要なADF Faces構成がweb.xmlファイルに自動的に追加されます。 |
必要な要素の詳細は、A.2.2項「web.xmlに必要な要素について」を参照してください。
web.xmlのADF Faces関連のオプションの構成要素の詳細は、A.2.3項「web.xmlのADF Facesコンテキスト・パラメータについて」を参照してください。
ADF Faces以外のweb.xmlの構成の詳細は、『Oracle Fusion Middleware Developing Web Applications, Servlets, and JSPs for Oracle WebLogic Server』を参照してください。
JDeveloperでJSFテクノロジを使用するプロジェクトを作成すると、デフォルト・サーブレットとマッピング要素を使用して、web.xmlの基礎ファイルが/WEB-INFディレクトリに作成されます。
プロジェクトでADF Facesコンポーネントを使用(ライブラリをインポートするだけでなく、コンポーネント・タグをページで使用)する場合、JDeveloperで、デフォルトJSF構成要素だけでなく、次のものもweb.xmlに自動的に追加されます。
MyFaces TrinidadフィルタおよびMyFaces Trinidadリソース・サーブレットに関連する構成要素
clientの値を持つjavax.faces.STATE_SAVING_METHODコンテキスト・パラメータ
アプリケーションでJSPフラグメントを使用するよう選択した場合、アプリケーションで.jsffファイルを認識および解釈するためのJSP構成要素が、JDeveloperで自動的に追加されます。
例A-1に、JSF、ADF Facesおよび.jsffファイルを使用する場合にJDeveloperで追加されるデフォルト要素を持つweb.xmlファイルを示します。
JSFおよびADF Facesの処理に必要なweb.xml構成要素の詳細は、A.2.2項「web.xmlに必要な要素について」を参照してください。
例A-1 生成されるweb.xmlファイル
<?xml version = '1.0' encoding = 'windows-1252'?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<description>Empty web.xml file for Web Application</description>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>35</session-timeout>
</session-config>
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
</web-app>
|
注意: データバインドされたWebページの作成にADFデータ・コントロールを使用する場合、アプリケーション・バインディング・コンテナのADFバインディング・フィルタとサーブレット・コンテキスト・パラメータがweb.xmlファイルに追加されます。 |
ADF Facesの構成オプションは、<context-param>要素を使用してweb.xmlに設定されます。
アプリケーション・ナビゲータで、「web.xml」をダブルクリックし、ファイルを開きます。
JDeveloperでは、web.xmlはデフォルトでは概要エディタで開きます。これは、エディタ・ウィンドウの下部の「概要」タブがアクティブなことで示されます。
概要エディタを使用してエントリを宣言的に追加または編集すると、JDeveloperでweb.xmlファイルが自動的に更新されます。
web.xmlファイルのXMLコードを直接編集するには、エディタ・ウィンドウの下部の「ソース」をクリックします。
XMLエディタで要素を編集すると、JDeveloperで変更が概要エディタに反映されます。
追加できるコンテキスト・パラメータの一覧は、A.2.3項「web.xmlのADF Facesコンテキスト・パラメータについて」を参照してください。
web.xmlに必要なJSFおよびADF Facesに関するアプリケーション全体の構成要素は次のとおりです。
コンテキスト・パラメータjavax.faces.STATE_SAVING_METHOD: アプリケーションのビューの状態の格納場所を指定します。この値はデフォルトではserverで、アプリケーションのビューの状態がサーバーに格納されます。ADF Facesを使用する場合は、javax.faces.STATE_SAVING_METHODをclientに設定し、ビューの状態をブラウザ・クライアントに格納することをお薦めします。clientに設定した場合、ADF Facesでトークンベースのクライアント側の状態保存が自動的に使用されます。デフォルトの15を使用するかわりに、使用するトークンの数を指定できます。状態保存コンテキスト・パラメータの詳細は、A.2.3項「web.xmlのADF Facesコンテキスト・パラメータについて」を参照してください。
MyFaces Trinidadフィルタおよびマッピング: MyFaces Trinidadフィルタorg.apache.myfaces.trinidad.webapp.TrinidadFilterをインストールします。これは、RequestContextオブジェクトの構築によって、ADF Facesの初期化の一部が適切に行われるようにするサーブレット・フィルタです。TrinidadFilterで、ファイルのアップロードも行われます。フィルタ・マッピングで、JSFサーブレットのシンボリック名がMyFaces Trinidadフィルタにマップされます。MyFaces Trinidadフィルタへの転送元のその他のフィルタには、転送およびリクエスト・ディスパッチャが必要です。
|
ヒント: アプリケーションで複数のフィルタを使用する場合、フィルタを実行順にweb.xmlファイルに必ずリストします。実行時、このファイルにリストされた順にフィルタがコールされます。 |
MyFaces Trinidadリソース・サーブレットおよびマッピング: MyFaces Trinidadリソース・サーブレットorg.apache.myfaces.trinidad.webapp.ResourceServletをインストールします。これは、リソース・ローダーに委任することによってWebアプリケーション・リソース(イメージ、スタイル・シート、JavaScriptライブラリ)を提供します。サーブレット・マッピングでは、MyFaces Trinidadリソース・サーブレットのシンボリック名がURLパターンにマップされます。デフォルトでは、MyFaces Trinidad Coreには/adf/*が、ADF Facesには/afr/*が、JDeveloperで使用されます。
JSFサーブレットおよびマッピング(JSFページを作成する場合、またはADF Facesコンポーネントにテンプレートを使用する場合に追加): JSFサーブレットservlet javax.faces.webapp.FacesServletでは、JSFを使用してユーザー・インタフェースを作成するWebアプリケーションのリクエスト処理ライフサイクルが管理されます。マッピングでは、JSFサーブレットのシンボリック名が、パス接頭辞または拡張子接尾辞パターンを使用するURLパターンにマップされます。
デフォルトでは、次のコードに示すように、パス接頭辞/faces/*がJDeveloperで使用されます。
<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping>
たとえば、Webページがindex.jspxの場合、URL http://localhost:8080/MyDemo/faces/index.jspxが送信されると、このURLによってJSFサーブレットがアクティブ化されます。JSFサーブレットでfaces接頭辞が取り除かれ、/MyDemo/index.jspxファイルがロードされます。
ADF Facesの構成オプションは、<context-param>要素を使用してweb.xmlに定義されます。次に例を示します。
<context-param> <param-name>oracle.adf.view.rich.LOGGER_LEVEL</param-name> <param-value>ALL</param-value> </context-param>
ADF Facesでは、次のコンテキスト・パラメータがサポートされています。
org.apache.myfaces.trinidad.CLIENT_STATE_METHOD: クライアント側状態保存がjavax.faces.STATE_SAVING_METHODを使用して有効になっている場合、使用するクライアント側状態保存のタイプを指定します。CLIENT_STATE_METHODの値は次のとおりです。
token: (デフォルト)ページの状態はセッションに格納しますが、トークンはクライアントに永続させます。HttpSessionオブジェクトに格納されている状態のブロックを識別するシンプル・トークンは、クライアントに格納されます。これにより、複数回表示される同一ページがADF Facesで明確になります。フェイルオーバーがサポートされます。
all: すべての状態情報がクライアントの(場合によっては非常に大きい)非表示のフォーム・フィールドに格納されます。これは、HttpSessionを使用しない開発者にとって有用です。
org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS: トークンベースのクライアント側状態保存が有効の場合、各ユーザーで一度に格納されるトークンの数を指定します。デフォルトは15です。この数を超えると、表示されてから最も長い時間が経過したページの状態が失われます。戻るボタンを頻繁に使用するユーザーや複数のウィンドウを同時に開くユーザーは、この影響を受けます。フレームに大幅に依存するHTMLアプリケーションを作成する場合、この値を大きくします。
org.apache.myfaces.trinidad.DEBUG_JAVASCRIPT: ADF Facesでは、クライアントへ配信するJavaScriptの曖昧化がデフォルトで行われ、同時にコメントと空白が取り除かれます。これにより、ADF Faces JavaScriptのダウンロード・サイズが大幅に削減されますが、JavaScriptのデバッグが複雑にもなります。アプリケーションの開発時にはtrueに設定して、曖昧化を無効にします。アプリケーションのデプロイにはfalseに設定します。
org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION: このパラメータは、デフォルトではfalseに設定されます。trueに設定した場合、ADF FacesでJSPファイルとCSSファイルの更新日付が自動的に確認され、ファイルに変更があった場合、保存されている状態が破棄されます。
oracle.adf.view.rich.LOGGER_LEVEL: このパラメータでは、デフォルト・レンダー・キットがoracle.adf.richの場合、JavaScriptロギングを有効にします。デフォルトは、OFFです。JavaScriptロギングを有効にする場合、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、ALLのいずれかのレベルを使用します。自動プロファイラ・インストルメンテーション・コードが有効(A.2.3.7項「プロファイリング」のoracle.adf.view.rich.profiler.ENABLEDを参照)な場合、INFOに設定します。
次のファイル・アップロード・コンテキスト・パラメータを指定できます。
org.apache.myfaces.trinidad.UPLOAD_MAX_MEMORY: アップロードしたファイルを格納する1つのリクエストで使用されるメモリーの最大サイズを指定します。デフォルトは、100Kです。
org.apache.myfaces.trinidad.UPLOAD_MAX_DISK_SPACE: アップロードしたファイルを格納する1つのリクエストで使用されるディスク領域の最大サイズを指定します。デフォルトは、2000Kです。
org.apache.myfaces.trinidad.UPLOAD_TEMP_DIR: ファイルのアップロード時に一時ファイルを格納するディレクトリを指定します。デフォルトは、ユーザーの一時ディレクトリです。
|
注意: ファイル・アップロードの初期化パラメータは、デフォルトのUploadedFileProcessorのみで処理されます。デフォルト・プロセッサをカスタムUploadedFileProcessor実装で置き換える場合、パラメータは処理されません。 |
oracle.adf.view.rich.ASSERT_ENABLEDパラメータを使用して、ADF Faces内でアサーションを使用するかどうかを指定できます。デフォルトは、falseです。アサーションを有効にするにはtrueに設定します。
次のJavaScriptプロファイリング・コンテキスト・パラメータを指定できます。
oracle.adf.view.rich.profiler.ENABLED: JavaScript Profilerで用意されている自動プロファイラ・インストルメンテーション・コードを使用するかどうかを指定します。デフォルトは、falseです。JavaScriptプロファイルを有効にするにはtrueに設定します。プロファイラが有効な場合、各ページでプロファイラ・データをフェッチするために追加のラウンドトリップが必要になります。デフォルトでは、/WEB-INF/profiler.xml構成ファイルがJDeveloperで使用されます。profiler.xmlの場所をオーバーライドするには、次に説明するROOT_FILEコンテキスト・パラメータを使用します。DEBUG_JAVASCRIPTをtrueに設定し、JavaScriptの曖昧化を無効にする場合もあります。LOGGER_LEVELを最低でもINFOに設定する必要もあります。
oracle.adf.view.rich.profiler.ROOT_FILE: 自動プロファイラ・インストルメンテーション・コードが有効の場合にロードする初期profiler.xmlファイルを指定します。ROOT_FILEが指定されていない場合、デフォルトでは、/WEB-INF/profiler.xmlファイルがJDeveloperで使用されます。
FaceletsViewHandlercom.sun.facelets.FaceletViewHandler
javax.faces.DEFAULT_SUFFIX: Faceletを使用するドキュメントのファイル拡張子として.xhtmlを使用します。
ダイアログを起動する接頭辞を変更するには、org.apache.myfaces.trinidad.DIALOG_NAVIGATION_PREFIXパラメータを設定します。
デフォルトはdialog:で、ダイアログを起動するJSFナビゲーション・ルールの結果の冒頭に使用されます(dialog:errorなど)。
org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSIONパラメータを設定すると、スキニング・キーに対するCSSクラス名の圧縮が決まります。
デフォルトは、falseです。圧縮を無効にする場合、trueに設定します。
|
パフォーマンスのヒント: 本番環境では、このパラメータをfalseに設定します。 |
oracle.adf.view.rich.automation.ENABLEDパラメータをtrueに設定し、コンポーネントID属性がnullの場合、自動テストの際、IDがnullでないようコンポーネントのtestIdが使用されます。testIdはタグのみに対する属性で、JavaコンポーネントAPIの一部ではありません。
|
注意: このコンテキスト・パラメータをtrueに設定すると、oracle.adf.view.rich.security.FRAME_BUSTINGコンテキスト・パラメータはneverに設定された場合と同じように動作します。詳細は、A.2.3.16項「フレームバスティング」を参照してください。 |
org.apache.myfaces.trinidad.CACHE_VIEW_ROOTパラメータを使用して、UIViewRootキャッシングを有効または無効にします。トークン・クライアント側状態保存が有効の場合、MyFaces Trinidadで各トークンを使用してUIViewRootツリー全体がキャッシュされ、更なる最適化が適用されます。(これはスレッドの安全性またはセッション・フェイルオーバーに影響しないことに注意してください。)UIViewRootツリーを再インスタンス化する必要がなく、ポストバックの処理スピードが大幅に速くなるため、これはAJAX集中型システムにとって重要な最適化です。
キャッシングを有効にするには、org.apache.myfaces.trinidad.CACHE_VIEW_ROOTパラメータをtrueに設定します。これがデフォルトです。キャッシングを無効にするには、パラメータをfalseに設定します。
|
注意: この種のキャッシングは、一部のJSFテクノロジと干渉することが認識されています。特に、Apache MyFaces TomahawksaveStateコンポーネントが機能せず、Faceletのテンプレート・テキストが二重に表示される場合があります。 |
oracle.adf.view.rich.tonalstyles.ENABLEDパラメータを使用してし色調スタイルの有効/無効を切り替えます。色調スタイル・クラス(.AFDarkTone、.AFMediumTone、.AFLightToneおよび.AFDefaultTone)は、後方互換用に引き続き使用できますが、かわりのスタイルとしてテーマが用意されています。テーマは色調スタイルよりオーサリングが容易です。セレクタへの依存が少なく、CSS格納セレクタを使用しないため、不具合が起こりにくくなります。1つのCSSファイル内のセレクタの数には制限があるため、色調スタイルとテーマの両方を同じアプリケーションでサポートできません。色調スタイルを無効にするには、falseに設定します。
oracle.adf.view.rich.pprNavigation.OPTIONS パラメータを使用して、部分ページ・ナビゲーションの有効/無効を切り替えます。デフォルトでは、値はoffです。部分ページ・ナビゲーションでは、アプリケーション全体で同じベース・ページを使用し、単にページ本体のコンテンツを各ナビゲーションに置き換えます。このため、ページが新しくなるたびにJavaScriptライブラリとスタイル・シートを再ロードする必要がなく、パフォーマンスが向上します。詳細は、7.4項「部分ページ・ナビゲーション」を参照してください。
有効な値は次のとおりです。
on: アプリケーションのPPRナビゲーションを有効にします。
|
注意: パラメータを有効にする場合、ナビゲーションに含まれるコマンド・コンポーネントのpartialSubmit属性をtrueに設定する必要があります。(partialSubmitの詳細は、5.1.1項「イベントおよび部分ページ・レンダリング」を参照してください) |
off: アプリケーションのPPRナビゲーションを無効にします。
onWithForcePPR: コマンド・コンポーネントでのアクションの結果としてナビゲーションが行われる場合、コンポーネントのpartialSubmitがtrueに設定されている場合と同様に、アクションは常にPPRを使用して配信されます(partialSubmitの詳細は、5.1.1項「イベントおよび部分ページ・レンダリング」を参照してください)。このため、コンポーネントのpartialSubmitがすでにtrueに設定されている場合、フレームワークでの処理はありません。そうでない場合、ドキュメント全体がリフレッシュされ、古いページ・リフレッシュ動作が保持されます。アクション・コンポーネントにナビゲーションが含まれない場合も、ドキュメント全体がリフレッシュされます。
oracle.adf.view.rich.libraryPartitioning.ENABLEDパラメータを使用して、JavaScriptのパーティション化の有効/無効を切り替えます。デフォルトでは、値はtrue(有効)です。JavaScriptのパーティション化を使用すると、ページのクライアント・コンポーネントによって必要とされるJavaScriptのみをダウンロードできます。
有効な値は次のとおりです。
true: JavaScriptのパーティション化が有効にされています(デフォルト)。
false: JavaScriptのパーティション化が無効にされています。
JavaScriptのパーティション化の使用および構成の詳細は、A.9項「JavaScriptライブラリのパーティション化の使用」を参照してください。
アプリケーションでフレームバスティングを使用するには、oracle.adf.view.rich.security.FRAME_BUSTINGコンテキスト・パラメータを使用します。フレームバスティングは、悪意のあるWebサイトが別のドメインのページをフレームに引き出して偽のページで覆い隠し、元のページの一部のみが表示されるようにしたり、クリックジャックされたページ(ボタンなど)が表示されるようにするクリックジャックを防ぐ方法です。ユーザーがボタンをクリックすると、実際はクリックジャックされたページでボタンをクリックしているため、予期しない結果になります。
たとえば、DomainAに存在するWebベースの電子メール・アプリケーションに対して、IFrameを使用してDomainAの電子メール・アプリケーションのページを指すページを作成してDomainBのWebサイトでページをクリックジャックするとします。2つのページを組み合せて、DomainBから引き出されたページがIFrameでページの大部分を占めるようにして、アカウントのすべての電子メールを削除するボタンのみが表示されるようにします。実際に電子メール・アプリケーション内で操作していることを知らないユーザーがボタンをクリックすると、意図せずにすべての電子メールが削除されることになります。
フレームバスティングは次のJavaScriptを使用して、アプリケーションのページがフレーム内で実行されるのをブロックし、クリックジャックを防ぎます。
top.location.href = location.href;
パラメータをalwaysに設定して、アプリケーションがフレームバスティングを使用するように構成すると、フレームでページの実行が試行されるたびに、ユーザーにはページがリダイレクトされているというアラートが表示され、前述のコードが実行されて最上位のページが表示されるため、ページのフレーム内での実行が却下されます。
アプリケーションでフレームを使用する必要がある場合は、パラメータをdifferentDomainに設定できます。この設定ではフレームがアプリケーションとは別のドメインから引き出される場合のみフレームバスティングが使用されます。これがデフォルト設定です。
たとえば、DomainApage2ページを含むフレームを使用するアプリケーションにDomainApage1という名前のページがあるとします。外部のDomainBpage1がDomainApage1ページのクリックジャックを試行するとします。結果は次のようなウィンドウ階層になります。
DomainBpage1
DomainApage1
DomainApage2
アプリケーションでdifferentDomainにフレームバスティングが設定されていれば、フレームワークは親ウィンドウ階層をたどって、任意の祖先ウィンドウが別のドメインから引き出されているかを判断できます。DoaminBpage1は別のドメインから引き出されているため、DomainApage1ページに対してフレームバスティングJavaScriptコードが実行され、トップレベル・ウィンドウが表示されます。DomainApage2は同じドメインから引き出されているため、DomainApage1はフレーム内での実行が許可されます。
有効な値は次のとおりです。
always: フレームでの実行が試行されると常にエラーが表示されリダイレクトします。
differentDomain: 別のドメインのページでフレームの実行が試行される場合のみ、エラーが表示されリダイレクトします(デフォルト)。
never: 任意のドメインの任意のフレームでページを実行できます。
|
注意: 次のコンテキスト・パラメータのいずれかをtrueに設定すると、このコンテキスト・パラメータは無視され、neverに設定した場合と同様に動作します。
|
アプリケーション全体に関わるその他のオプションのコンテキスト・パラメータは次のとおりです。
javax.faces.CONFIG_FILE: JSFアプリケーション構成リソース・ファイルへのパスを指定します。次のコードに示すとおり、値には、アプリケーション・コンテキストの相対パスのカンマ区切りリストを使用します。アプリケーションで複数のJSF構成ファイルを使用する場合、このパラメータを設定します。
<context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value> /WEB-INF/faces-config1.xml,/WEB-INF/faces-config2.xml </param-value> </context-param>
javax.faces.DEFAULT_SUFFIX: JSFコンポーネントを含むJSPページのファイル拡張子(接尾辞)を指定します。デフォルト値は、.jspです。
|
注意: JSFサーブレットに対する接頭辞マッピング(/facesなど)を使用する場合、このパラメータ値は無視されます。これはデフォルトで行われます。 |
javax.faces.LIFECYCLE_ID: javax.faces.lifecycle.LifecycleFactory.DEFAULT_LIFECYCLE定数で設定されるデフォルト以外のライフサイクル識別子を指定します。
|
注意: これを他の値に設定すると、ADF Facesが機能しません。 |
org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION: 実行時の変更の表示に、JSPファイルとCSSファイルで再起動が必要かどうかを指定します。デフォルトではfalseに設定されています。サーバーを再起動せずに変更を表示できるようにする場合は、trueに設定します。
JSF構成ファイルは、JSFアプリケーションの各リソース(カスタム・バリデータやマネージドBeanなど)を登録するとともに、すべてのページ間ナビゲーション・ルールを定義するファイルです。JSF構成ファイル名は、アプリケーションで任意の名前にできますが、通常、faces-config.xmlファイルです。小規模なアプリケーションには、通常、1つのfaces-config.xmlファイルがあります。
アプリケーションでADF Facesコンポーネントを使用する場合、必要な構成要素がfaces-config.xmlにJDeveloperで自動的に追加されます。faces-config.xmlファイルの詳細は、Sun社のWebサイト(http://java.sun.com)の「Java EE 5 tutorial」を参照してください。
JDeveloperでJSFテクノロジを使用するプロジェクトを作成すると、空のfaces-config.xmlファイルが/WEB-INFディレクトリに作成されます。JSFテクノロジを使用するアプリケーション・テンプレート(Java EE Webアプリケーション・テンプレートなど)を基に、新規アプリケーション・ワークスペースを作成した場合も、空のfaces-config.xmlファイルが自動的に追加されます。詳細は、2.2項「アプリケーション・ワークスペースの作成」を参照してください。
アプリケーションでADF Facesコンポーネントを使用する場合、ADFデフォルト・レンダー・キットIDをoracle.adf.richに設定する必要があります。JSFページへのADF Facesコンポーネントの最初の挿入時、またはFusionテンプレートを使用して作成されたアプリケーション・ワークスペースへの最初のJSFページの追加時、例A-2に示すとおり、ADFコンポーネントのデフォルト・レンダー・キットがfaces-config.xmlにJDeveloperで自動的に挿入されます。
例A-2 faces-config.xmlでのADFデフォルト・レンダー・キット構成
<?xml version="1.0" encoding="windows-1252"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
<application>
<default-render-kit-id>oracle.adf.rich</default-render-kit-id>
</application>
</faces-config>
通常、次のものをfaces-config.xmlで構成します。
メッセージ・バンドル、サポートされているロケールなどのアプリケーション・リソース
ページ間のナビゲーション・ルール
カスタム・バリデータおよびコンバータ
データを保持および処理、UIイベントの処理およびビジネス・ロジックの実行用マネージドBean
|
注意: アプリケーションでADF Controllerを使用する場合、これらの項目はadfc-config.xmlファイルで構成されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「タスク・フローの概説」を参照してください。 |
JDeveloperでは、宣言的概要エディタを使用してfaces-config.xmlファイルを変更できます。JSF構成要素に精通している場合は、XMLエディタを使用してコードを直接編集できます。
JDeveloperでfaces-config.xmlを編集する手順:
アプリケーション・ナビゲータで、faces-config.xmlをダブルクリックし、ファイルを開きます。
JDeveloperでは、faces-config.xmlはデフォルトでは概要エディタで開きます。これは、エディタ・ウィンドウの下部の「概要」タブがアクティブなことで示されます。
概要エディタを使用してマネージドBeanやバリデータなどを宣言的に追加すると、JDeveloperでfaces-config.xmlファイルが自動的に更新されます。
faces-config.xmlのXMLコードを直接編集するには、エディタ・ウィンドウの下部の「ソース」をクリックします。
XMLエディタで要素を編集すると、JDeveloperで変更が概要エディタに反映されます。
|
ヒント: JSFでは、1つのfaces-config.xmlファイルに複数の<application>要素を使用できます。JSF構成エディタの概要モードでは、ファイルの最初の<application>インスタンスの編集のみが許可されます。その他の<application>要素については、XMLエディタを使用してファイルを直接編集する必要があります。 |
adf-config.xmlファイルは、セキュリティ、キャッシュ、変更永続性などのアプリケーション全体の機能の構成に使用されます。他のOracleコンポーネントもこのファイルでプロパティを構成します。
アプリケーションの構成を行う前に、まず、adf-config.xmlファイルを作成する必要があります。その後、アプリケーションで使用するアプリケーション全体のADF機能の構成を追加できます。
JDeveloperでadf-config.xmlを作成および編集する手順:
プロジェクト用のMETA-INFディレクトリの作成がまだの場合は、これを作成します。
META-INFディレクトリを右クリックし、ポップアップ・メニューから「新規」を選択します。
新規ギャラリの「カテゴリ」ペインの「一般」ノードで「XML」を選択し、「項目」ペインで「XML文書」を選択します。
|
ヒント: 「一般」ノードが表示されない場合、ギャラリの上部の「すべてのテクノロジ」タブをクリックします。 |
ファイル名にadf-config.xmlと入力し、META-INFディレクトリに保存します。
ソース・エディタで、生成されたコードを例A-3のコードに置き換えます。
これで、使用する機能の構成に必要な要素を追加できます。
adf-settings.xmlファイルには、ADF Facesヘルプ・プロバイダなどのプロジェクトレベルおよびライブラリレベルの設定が含まれます。adf-settings.xmlファイルの構成設定は固定で、アプリケーションのデプロイ時やデプロイ後に変更できません。アプリケーションには複数のadf-settings.xmlファイルがある場合があります。ADF設定ファイルのユーザーは、これらの構成の内容をマージする必要があります。
アプリケーションの構成を行う前に、まず、adf-settings.xmlファイルを作成する必要があります。その後、アプリケーションで使用するプロジェクトの機能の構成を追加できます。このファイルでの構成の詳細は、A.5.2項「adf-settings.xmlの要素について」を参照してください。
JDeveloperでadf-settings.xmlを作成および編集する手順:
プロジェクト用のMETA-INFディレクトリの作成がまだの場合は、これを作成します。
META-INFディレクトリを右クリックし、ポップアップ・メニューから「新規」を選択します。
新規ギャラリの「カテゴリ」ペインの「一般」ノードで「XML」を選択し、「項目」ペインで「XML文書」を選択します。
|
ヒント: 「一般」ノードが表示されない場合、ギャラリの上部の「すべてのテクノロジ」タブをクリックします。 |
ソース・エディタで汎用コードを例A-4に示すコードに置き換えます。Webアプリケーション・ルートに対する正しい設定を使用します。
これで、使用する機能の構成に必要な要素を追加できます。詳細は、A.5.2項「adf-settings.xmlの要素について」を参照してください。
adf-settings.xmlファイルでは次の構成要素がサポートされています。
次の要素を使用して、ヘルプ・システムで使用されるヘルプ・プロバイダを登録します。
<adf-faces-config>: ADF Faces固有の構成をグループにまとめる親要素。
<prefix-characters>: ヘルプ・プロバイダで、特定の接頭辞で始まるヘルプ・トピックIDにのみヘルプ・トピックを提供する場合、その接頭辞を指定します。接頭辞を使用しない場合は、省略できます。
<help-provider-class>: ヘルプ・プロバイダ・クラス。
<custom-property>および<property-value>: ヘルプ・プロバイダ・クラスで受け入れるパラメータを定義するプロパティ要素。
例A-5に、登録されたヘルプ・プロバイダの例を示します。このケースでは、アプリケーションのヘルプ・プロバイダは1つのみのため、接頭辞を含める必要がありません。
例A-5 ヘルプ・プロバイダの登録
<adf-settings xmlns="http://xmlns.oracle.com/adf/settings">
<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/settings">
<help-provider prefix="MYAPP">
<help-provider-class>
oracle.adfdemo.view.webapp.MyHelpProvider
</help-provider-class>
<property>
<property-name>myCustomProperty</property-name>
<value>someValue</value>
</property>
</help-provider>
</adf-faces-config>
</adf-settings>
ADF Facesコンポーネントを使用してJSFアプリケーションを作成する場合、ADF Facesの機能(スキン・ファミリ、ページ・アクセシビリティ・サポートのレベルなど)をtrinidad-config.xmlファイルで構成します。faces-config.xml同様、trinidad-config.xmlは、JSF式言語(EL)または静的値を使用して要素プロパティを定義できる単純なXML構造を持ちます。
JDeveloperで、ADF FacesコンポーネントをJSFページへ初めて追加すると、trinidad-config.xmlの基礎ファイルが/WEB-INFディレクトリに自動的に作成されます。例A-6に、trinidad-config.xmlの基礎ファイルを示します。
例A-6 JDeveloperによって作成されるtrinidad-config.xml基礎ファイル
<?xml version="1.0" encoding="windows-1252"?> <trinidad-config xmlns="http://xmlns.oracle.com/trinidad/config"> <skin-family>blafplus-rich</skin-family> </trinidad-config>
JDeveloperでは、ADF Facesを使用するJSFアプリケーションに対して、blafplus-richスキン・ファミリがデフォルトで構成されます。これをblafplus-medium、simpleに変更することも、カスタム・スキンを使用することもできます。カスタム・スキンを使用する場合は、trinidad-skins.xml構成ファイルを作成し、カスタム・スキンを使用するようtrinidad-config.xmlを変更します。カスタム・スキンの作成の詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
通常、次のものをtrinidad-config.xmlファイルで構成します。
ページ・アニメーション
ページ・アクセシビリティ・サポートのレベル
タイムゾーン
拡張デバッグ出力
Oracle Help for the Web(OHW)のURL
ファイルのアップロードに使用するカスタム・ファイル・アップロード・プロセッサの登録もできます。
JDeveloperでは、XMLエディタを使用してtrinidad-config.xmlを変更できます。
JDeveloperでtrinidad-config.xmlを編集する手順:
アプリケーション・ナビゲータでtrinidad-config.xmlをダブルクリックし、XMLエディタにファイルを開きます。
要素名に精通している場合は、エディタに入力します。そうでない場合は、構造ウィンドウを使用して挿入します。
構造ウィンドウで次のようにします。
前に挿入または後に挿入メニューから選択する要素を右クリックし、挿入する要素をクリックします。
構造ウィンドウで新たに挿入する要素をダブルクリックし、プロパティ・エディタにこれを開きます。値を入力するか、ドロップダウン・リストが使用可能な場合はリストから選択します。
大抵の場合、JSF EL式(#{view.locale.language=='en' ? 'minimal' : 'blafplus-rich'}など)または静的値(<debug-output>true</debug-output>など)を入力できます。リクエストごとにEL式が動的に再評価され、適切なオブジェクト(Booleanオブジェクトなど)が返されます。
使用できる構成要素のリストは、A.6.2項「trinidad-config.xmlの要素について」を参照してください。
trinidad-config.xmlファイルの構成後、プログラムから、あるいはJSF EL式を使用してプロパティ値を取得できます。詳細は、A.8項「RequestContext EL暗黙オブジェクトの使用」を参照してください。
すべてのtrinidad-config.xmlファイルは、http://myfaces.apache.org/trinidad/config XMLネームスペースの<trinidad-config>要素で始まる必要があります。<trinidad-config>内の要素の順序は任意です。要素のインスタンスを複数含めることができます。
一部のADF Facesコンポーネントでは、レンダリング時にアニメーションが使用されます。たとえば、ツリーおよびツリー表でノードを展開および縮小する際、アニメーションが使用されます。次のコンポーネントでレンダリング時にアニメーションが使用されます。
ファセットを公開および非公開にする場合の表の詳細ファセット
ノードを展開および縮小する際のツリーおよびツリー表
メニュー
ポップアップ・セレクタ
ダイアログ
ノート・ウィンドウおよびメッセージの表示
使用されるアニメーションのタイプとタイミングは、アプリケーションのスキンの一部として構成されます。詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
animation-enabled要素はtrueまたはfalseに設定できます。また、trueまたはfalseに解決されるEL式を使用できます。
A.6.1項「trinidad-config.xmlでのADF Facesの機能の構成方法」での説明のとおり、JDeveloperでは、ADF Facesを使用するJSFアプリケーションにblafplus-richスキン・ファミリがデフォルトで使用されます。<skin-family>の値をblafplus-medium、simpleに変更することも、カスタム・スキンを使用することもできます。カスタム・スキンの作成および使用の詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
次のコードに示すように、スキン・ファミリ値にEL式を使用できます。
<skin-family>#{prefs.proxy.skinFamily}</skin-family>
日付の処理および表示に使用するタイムゾーンおよび2桁のみでの年の解析に使用する年オフセットを設定するには、次の要素を使用します。
<time-zone>: デフォルトでは、クライアント・ブラウザで使用されているタイムゾーンがADF Facesで使用されます。必要な場合は、TimeZoneと評価されるEL式を使用できます。この値は、文字列をDateに変換する際にorg.apache.myfaces.trinidad.converter.DateTimeConverterで使用されます。
<two-digit-year-start>: 値が設定されていない場合、これによってデフォルトの1950になります。必要な場合は、静的整数値またはIntegerオブジェクトと評価されるEL式を使用できます。この値は、文字列のDateへの変換にorg.apache.myfaces.trinidad.converter.DateTimeConverterで使用されます。
デフォルトでは、<debug-output<要素はfalseです。<debug-output>をtrueに設定すると、ADF Facesでデバッグ出力が拡張されます。次の機能がデバッグ出力に追加されます。
自動インデント
HTMLのブロックを処理したコンポーネントを識別するコメント。
対応していない要素、1つの要素内での同じ属性の繰り返しの使用またはその他の不適切なマークアップの問題の検出。
一般的なHTMLエラー(他の<form>タグ内の<form>タグ、無効な場所に使用されている<tr>タグや<td>タグなど)の検出。
<accessibility-mode>を使用して、アプリケーションでのアクセシビリティ・サポートのレベルを定義します。サポートされている値は次のとおりです。
default: 出力でアクセシビリティ機能がサポートされます。
inaccessible: 出力サイズを最適化するため、アクセシビリティ固有の構成要素は削除されます。
screenReader: スクリーン・リーダー下の動作を改善するために、アクセシビリティ固有の構成要素が追加されています(他のユーザーにはマイナスの影響がある場合もあります。たとえば、アクセシビリティ・モードがスクリーン・リーダー・モードに設定されていると、アクセス・キーは表示されません)。
<accessibility-profile>を使用して、アプリケーションで使用する色のコントラストやフォント・サイズを構成します。サポートされている値は次のとおりです。
high-contrast: デフォルト・コントラストではなく高コントラストを使用してアプリケーションが表示されます。
large-fonts: デフォルト・サイズのフォントではなく大きいフォントを使用してアプリケーションが表示されます。
複数の設定を使用するには、値を空白で区切ります。
ADF Facesのページ・レンダリング方向は、デフォルトでは、ブラウザで使用されている言語をベースにしています。しかし、次のコードに示すように、Booleanオブジェクトに評価されるEL式、あるいはtrueまたはfalseを使用して<right-to-left>要素にデフォルト・ページ・レンダリング方向を明示的に設定できます。
<!-- Render the page right-to-left for Arabic -->
<!-- and left-to-right for all other languages -->
<right-to-left>
#{view.locale.language=='ar' ? 'true' : 'false'}
</right-to-left>
通貨フィールドの書式設定に使用する通貨コードの設定、および数値の桁と小数点に使用する区切り文字の定義を行うには、次の要素を使用します。
<currency-code>: コンバータで明示的に通貨コードが指定されていない通貨フィールドの書式設定に、org.apache.myfaces.trinidad.converter.NumberConverterで使用されるデフォルトのISO 4217通貨コードを定義します。静的値またはStringオブジェクトと評価されるEL式を使用します。次に例を示します。
<!-- Set the currency code to US dollars. --> <currency-code>USD</currency-code>
<number-grouping-separator>: 数値の桁区切りに使用される文字(カンマなど)を定義します。ADF Facesでは現在のロケールから区切り文字が自動的に導出されますが、この要素に値を指定して、デフォルトをオーバーライドできます。静的値またはCharacterオブジェクトと評価されるEL式を使用できます。設定されている場合、この値が、解析および書式設定時にorg.apache.myfaces.trinidad.converter.NumberConverterで使用されます。
<!-- Set the number grouping separator to period for German -->
<!-- and comma for all other languages -->
<number-grouping-separator>
#{view.locale.language=='de' ? '.' : ','}
</number-grouping-separator>
<decimal-separator>: 小数点区切りに使用される文字(ピリオド、カンマなど)を定義します。ADF Facesでは現在のロケールから区切り文字が自動的に導出されますが、この要素に値を指定して、デフォルトをオーバーライドできます。静的値またはCharacterオブジェクトと評価されるEL式を使用できます。設定されている場合、この値が、解析および書式設定時にorg.apache.mtfaces.trinidad.converter.NumberConverterで使用されます。
<!-- Set the decimal separator to comma for German -->
<!-- and period for all other languages -->
<decimal-separator>
#{view.locale.language=='de' ? ',' : '.'}
</decimal-separator>
ADF FacesおよびMyFaces Trinidadは、デフォルトでは、ローカライズされたテキストに使用されているのと同じロケール(デフォルトではブラウザのロケール)で、日付(週の最初の曜日も)と数値を書式設定します。ただし、その他のロケールで日付と数値を書式設定する場合は、IANA形式のコード(ja、fr-CAなど)を値とする<formatting-locale>要素を使用できます。この要素の内容は、IANA文字列を指すEL式またはjava.util.Localeオブジェクトです。
ADF Facesで使用する出力モードを変更するには、次の値のいずれかを使用して<output-mode>要素を設定します。
default: デフォルト・ページ出力モード(通常、表示)。
printable: 印刷可能ページに適した出力モード。
email: ページのコンテンツを電子メールするのに適した出力モード。
ADF Facesでは、同時にアクティブなPageFlowScopeインスタンスの最大数がデフォルトで15に設定されます。この数を変更するには、<page-flow-scope-lifetime>要素を使用します。他の要素とは異なり、静的値を使用する必要があります。EL式はサポートされていません。
大半のアプリケーションでは、ADF Facesで用意されているデフォルトのUploadedFileProcessorインスタンスを置き換える必要はありません。しかし、アプリケーションで非常に大きなファイルのアップロードをサポートする必要がある場合、またはファイルのアップロードに大きく依存する場合、デフォルト・プロセッサをカスタムUploadedFileProcessor実装で置き換えることができます。
たとえば、ADF Facesでリクエスト時に一時格納を処理するかわりに、最終的な格納場所にファイルを即座に格納する実装を使用することにより、パフォーマンスを向上させることができます。デフォルト・プロセッサを置き換えるには、次のコードに示すように、<uploaded-file-processor>要素を使用してカスタム実装を指定します。
<uploaded-file-processor> com.mycompany.faces.myUploadedFileProcessor </uploaded-file-processor>
ADF Facesのバリデータとコンバータでは、クライアント側の検証と変換も、サーバー側の検証と変換もサポートされます。ADF Facesのクライアント側バリデータとコンバータは、クライアントでJavaScriptが使用される以外は、サーバー側バリデータとコンバータと同様に動作します。
JavaScript対応のバリデータとコンバータは、フォームの送信時にクライアントで実行されるため、サーバーへのラウンドトリップなしにエラーが捕捉されます。
リッチ・クライアント版のADF Facesでは、<client-validation-disabled>構成要素はサポートされていません。つまり、ADF Facesアプリケーションでは、クライアント側検証と変換を無効にできません。
JDeveloperでは、ADF Facesコンポーネントを使用してJSFページを作成する場合、blafplus-richスキン・ファミリがデフォルトで使用されます。A.6.1項「trinidad-config.xmlでのADF Facesの機能の構成方法」での説明のとおり、スキン・ファミリはtrinidad-config.xmlファイルで構成されます。アプリケーションにカスタム・スキンを使用する場合は、カスタム・スキンのアプリケーションでの登録に使用されるtrinidad-skins.xmlファイルを作成します。
カスタム・スキンの作成の詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
ADF Facesでは、EL暗黙オブジェクトrequestContextを使用して、trinidad-config.xmlファイルで定義されている構成プロパティから値を取得できます。requestContext暗黙オブジェクトはorg.apache.myfaces.trinidad.context.RequestContextクラスのインスタンスで、java.util.Mapタイプのいくつかのプロパティを公開して、JSF EL式によるコンテキスト・オブジェクト・プロパティ値の取得を可能にします。
たとえば、EL式#{requestContext}はRequestContextオブジェクト自体を返し、EL式#{requestContext.skinFamily}は、<skin-family>要素の値をtrinidad-config.xmlファイルから返します。
EL式を使用して、コンポーネント属性値をrequestContext暗黙オブジェクトのプロパティにバインドすることもできます。たとえば、次のEL式では、<currency-code>プロパティがJSF ConvertNumberコンポーネントのcurrencyCode属性値にバインドされています。
<af:outputText>
<f:convertNumber currencyCode="#{requestContext.currencyCode}"/>
</af:outputText>
使用できるrequestContext暗黙オブジェクト・プロパティは、次のとおりです。
requestContext.accessibilityMode: <accessibility-mode>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.agent: リクエストを行っているクライアント・エージェントを示し、レンダリングされた出力を表示するオブジェクトを返します。agentオブジェクトのプロパティは次のとおりです。
agentName: エージェント・ブラウザの正規の名前(gecko、ieなど)。
agentVersion: エージェント・ブラウザのバージョン番号。
capabilities: 現在のクライアント・リクエストに対する機能名(高さ、幅など)とその値のMapを返します。
hardwareMakeModel: ハードウェア・メーカーとモデルの正規の名前(nokia6600、sonyericssonP900など)。
platformName: プラットフォームの正規の名前(ppc、windows、macなど)。
platformVersion: プラットフォームのバージョン番号。
type: エージェント・タイプ(desktop、pda、phoneなど)。
requestContext.clientValidationDisabled: <client-validation-disabled>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.colorPalette: カラー・パレット名をキーとし、カラー・パレットを結果として返すMapを返します。各カラー・パレットは、java.awt.Colorオブジェクトの配列です。4つの標準カラー・パレットへのアクセスを提供します。
web216: 216のWebセーフ・カラー
default49: 全透明のエントリを1つ含む49色のパレット
opaque40: 全透明のエントリを含まない49色のパレット
default80: 全透明のエントリを1つ含む80色のパレット
requestContext.currencyCode: <currency-code>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.debugOutput: <debug-output>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.decimalSeparator: <decimal-separator>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.formatter: 再帰的Map構造を使用してメッセージを書式設定するMapオブジェクトを返します。最初のキーはメッセージの書式設定マスクで、2番目のキーはメッセージの最初のパラメータです。
requestContext.helpSystem: ヘルプ・システム・プロパティをキーとして受け入れ、URLを結果として返すMapオブジェクトを返します。たとえば、EL式#{requestContext.helpSystem['frontPage']}は、ヘルプ・システムのフロント・ページへのURLを返します。trinidad-config.xmlファイルに<oracle-help-servlet-url>要素を構成してあることを前提とします。
requestContext.helpTopic: トピック名をキーとして受け入れ、URLを結果として返すMapオブジェクトを返します。たとえば、EL式#{requestContext.helpTopic['foo']}は、ヘルプ・トピックfooへのURLを返します。trinidad-config.xmlファイルに<oracle-help-servlet-url>要素を構成してあることを前提とします。
requestContext.numberGroupingSeparator: <number-grouping-separator>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.oracleHelpServletUrl: <oracle-help-servlet-url>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.outputMode: <output-mode>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.pageFlowScope: pageFlowScopeオブジェクトでのオブジェクトのMapを返します。
requestContext.rightToLeft: <right-to-left>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.skinFamily: <skin-family>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.timeZone: <time-zone>要素の値をtrinidad-config.xmlファイルから返します。
requestContext.twoDigitYearStart: <two-digit-year-start>要素の値をtrinidad-config.xmlファイルから返します。
プロパティの完全なリストは、Javadocのorg.apache.myfaces.trinidad.context.RequestContextを参照してください。
|
注意: リクエストごとに、org.apache.myfaces.trinidad.context.RequestContextクラスのインスタンスが1つ存在します。RequestContextクラスは、JSF FacesContextクラスを拡張しません。
構成プロパティをプログラムで取得するには、次のコードに示すように、まず、静的
RequestContext context = RequestContext.getCurrentInstance();
// Get the time-zone property
TimeZone zone = context.getTimeZone();
// Get the right-to-left property
if (context.isRightToLeft())
{
.
.
.
}
|
ADF Facesは、そのコンポーネントのJavaScriptファイルをJavaScript機能にグループ化します。JavaScript機能は、その機能を記述する論理識別子に関連付けられたJavaScriptファイルのコレクションです。たとえば、panelStretchLayoutクライアント・コンポーネントは、次の2つのJavaScriptファイルで構成されます。
oracle/adf/view/js/component/rich/layout/AdfRichPanelStretchLayout.js
oracle/adfinternal/view/js/laf/dhtml/rich/AdfDhtmlPanelStretchLayoutPeer.js
これらの2つのファイルは、AdfRichPanelStretchLayout機能にグループ化されます。
JavaScript機能は、さらにJavaScriptパーティションにグループ化されます。JavaScriptパーティションを使用すると、JavaScript機能を大きなコレクションにグループ化してダウンロード・サイズとラウンドトリップ数に影響を及ぼすことができます。たとえば、panelStretchLayoutコンポーネントはpanelSplitterコンポーネントとともに使用されることが多いため、子に拡大できる他のADF Facesレイアウト・コンポーネントとともにこれら2つのコンポーネントの機能をストレッチ・パーティションにグループ化できます。実行時にページがロードされると、フレームワークによりページで使用されるコンポーネントが決定され、そこから必要な機能が決定されます(機能名はコンポーネントのコンストラクタ名と同じ)。これらの機能を含むパーティションのみがダウンロードされます。JavaScriptのパーティション化の詳細は、1.2.1.2項「JavaScriptライブラリのパーティション化」を参照してください。
機能およびパーティションは、構成ファイルを使用して定義されます。ADF Facesには、デフォルトの機能およびパーティション構成ファイルが含まれています。独自の実装を作成することでデフォルトのパーティションを上書きできます。カスタムADF Facesコンポーネントを作成する場合、これらのコンポーネントに独自の機能およびパーティション構成ファイルを作成できます。
デフォルトでJavaScriptのパーティション化は有効にされています。アプリケーションでJavaScriptのパーティション化を使用するかどうかは、web.xmlファイルのコンテキスト・パラメータによって決定されます。JavaScriptのパーティション化の有効化および無効化の詳細は、A.2.3.15項「JavaScriptのパーティション化」を参照してください。
adf-js-features.xmlファイルを作成してから機能にエントリを追加することでJavaScript機能を作成できます。
|
注意: カスタムADF Facesコンポーネントを作成する場合に、JavaScript機能を作成できます。すべての既存のADF Facesコンポーネントには、すでにそれらのコンポーネント向けに作成された機能があり、これらは変更できません。 |
JavaScript機能を作成する手順:
コンポーネント用のMETA-INFディレクトリの作成がまだの場合は、これを作成します。
META-INFディレクトリを右クリックし、ポップアップ・メニューから「新規」を選択します。
新規ギャラリの「カテゴリ」ペインの「一般」ノードで「XML」を選択し、「項目」ペインで「XML文書」を選択します。
|
ヒント: 「一般」ノードが表示されない場合、ギャラリの上部の「すべてのテクノロジ」タブをクリックします。 |
ファイル名にadf-js-features.xmlと入力し、META-INFディレクトリに保存します。
ソース・エディタで、生成されたコードを例A-3のコードに置き換えます。
次の要素を追加すると、関連するコンポーネント・ファイルおよび依存性とともに機能が移入されます。
features: 構成ファイルのルート要素です。
feature: features要素の子として作成されます。この要素には1つのfeature-name子要素が含まれている必要があり、feature-class要素およびfeature-dependency要素はいくつでも含めることができます。
feature-name: feature要素の子として作成されます。機能の名前を指定します。この値にはクライアント・コンポーネントのコンストラクタ名を使用する必要があります。
feature-class: feature要素の子として作成されます。この機能に含める1つのJavaScriptファイルまたはクラスの場所を指定します。複数のfeature-class要素がある場合もあります。
feature-dependency: feature要素の子として作成されます。この機能が依存する別の機能の名前を指定します。たとえば、コンポーネントBでコンポーネントAを拡張する場合、コンポーネントAを示す機能はコンポーネントBへの依存性としてリストされている必要があります。依存性を記述することで、フレームワークは2つの機能が同じパーティションになくても、依存するクラスが使用できることを確認できます。
例A-8に、ポップアップ・コンポーネントを使用し、ポップアップ機能への依存性を持つ架空のカスタム・コンポーネントのfeature要素を示します。
例A-8 JavaScript機能の構成
<features xmlns="http://xmlns.oracle.com/adf/faces/feature">
<feature>
<feature-name>AcmeMyPane</feature-name>
<feature-class>
oracle/adfdemo/acme/js/component/AcmeMyPane.js
</feature-class>
<feature-class>
oracle/adfdemo/acme/js/event/AcmePaneSelectEvent.js
</feature-class>
<feature-class>
oracle/adfdemo/acme/js/component/AcmeMyPanePeer.js
</feature-class>
<!-- Dependencies -->
<!-- Popup hints -->
<feature-dependency>AdfRichPopup</feature-dependency>
</feature>
adf-js-partitions.xmlファイルを作成してから機能にエントリを追加することでJavaScriptパーティションを作成できます。
|
注意: ADF Facesには、デフォルトのadf-js-partitions.xmlファイルがあります(例A-11参照)。パーティションの構成を変更する場合は、独自の完全なadf-js-partitions.xmlファイルを作成する必要があります。実行時にフレームワークは、そのファイルのWEB-INFディレクトリを検索します。見つからない場合は、デフォルトのパーティション・ファイルがロードされます。 |
JavaScriptパーティションを作成する手順:
WEB-INFディレクトリを右クリックし、ポップアップ・メニューから「新規」を選択します。
新規ギャラリの「カテゴリ」ペインの「一般」ノードで「XML」を選択し、「項目」ペインで「XML文書」を選択します。
|
ヒント: 「一般」ノードが表示されない場合、ギャラリの上部の「すべてのテクノロジ」タブをクリックします。 |
ファイル名にadf-js-partitions.xmlと入力し、WEB-INFディレクトリに保存します。
ソース・エディタで、生成されたコードを例A-3のコードに置き換えます。
次の要素を追加すると、関連する機能とともにパーティションが移入されます。
partitions: 構成ファイルのルート要素です。
partition: partitions要素の子として作成されます。この要素には1つのpartition-name子要素および1つ以上のfeature要素が含まれている必要があります。
partition-name: partition要素の子として作成されます。パーティションの名前を指定します。この値は、このパーティションのJavaScriptライブラリに一意のURLを作成するために使用されます。
feature: partition要素の子として作成されます。このパーティションに含める機能を指定します。複数のfeature要素がある場合もあります。
|
ヒント: adf-js-features.xmlファイルで構成され、パーティションに表示されない機能は、独自のパーティションに存在するものとして扱われます。 |
例A-10に、AdfRichTree機能およびAdfRichTreeTable機能を含むtreeパーティションのpartition要素を示します。
ADF Facesによって、アプリケーションの初期化時にライブラリのパーティション構成ファイルがロードされます。まず、ADF Facesによって、META-INFディレクトリのすべてのadf-js-features.xmlファイルが検索され、見つかったすべてのファイルがロードされます(ADF Facesのデフォルトの機能構成ファイルを含む)。
パーティション構成ファイルについては、ADF FacesはWEB-INFディレクトリでadf-js-partitions.xmlという名前の1つのファイルを検索します。このファイルが見つからない場合は、ADF Facesのデフォルトのパーティション構成が使用されます。
レンダリング・トラバース中、ADF Facesはページによって必要とされるJavaScript機能に関する情報を収集します。トラバース終了時に(レンダリングされた)ページ・コンテンツによって必要とされるJavaScript機能の包括的なセットが認識されます。必要とされるJavaScript機能のセットが認識されると、ADF Facesはパーティション構成ファイルを使用して、これを必要とされるパーティションのセットにマップします。必要とされるパーティションのセットを使用して、これらのパーティションへのHTML <script>参照は、HTMLドキュメントの末尾直前でレンダリングされます。
次に、ADF Faces機能をカテゴリごとに示します。
表A-1には、各ページに存在するフレームワーク・ブートストラップ機能が含まれています。
表A-1 ブートストラップ機能
| 名前 | 説明 |
|---|---|
|
|
|
|
|
|
表A-2には、コンポーネントのベース・クラスに対応する機能が含まれています。
表A-2 コンポーネントのベース機能
| 名前 | 説明 |
|---|---|
|
|
|
|
|
chooseコンポーネントのベース機能クラス |
|
|
collectionコンポーネントのベース機能クラス |
|
|
|
|
|
commandコンポーネントのベース機能クラス |
|
|
declarativeコンポーネントのベース機能クラス |
|
|
decorate collectionコンポーネントのベース機能クラス |
|
|
dialogコンポーネントのベース機能クラス |
|
|
|
|
|
editable valueコンポーネントのベース機能クラス |
|
|
|
|
|
goコンポーネントのベース機能クラス |
|
|
includeコンポーネントのベース機能クラス |
|
|
inputコンポーネントのベース機能クラス |
|
|
input popupコンポーネントのベース機能クラス |
|
|
iteratorコンポーネントのベース機能クラス |
|
|
messageコンポーネントのベース機能クラス |
|
|
messagesコンポーネントのベース機能クラス |
|
|
navigation levelコンポーネントのベース機能クラス |
|
|
navigation pathコンポーネントのベース機能クラス |
|
|
objectコンポーネントのベース機能クラス |
|
|
outputコンポーネントのベース機能クラス |
|
|
panelコンポーネントのベース機能クラス |
|
|
pollコンポーネントのベース機能クラス |
|
|
popupコンポーネントのベース機能クラス |
|
|
processコンポーネントのベース機能クラス |
|
|
progressコンポーネントのベース機能クラス |
|
|
queryコンポーネントのベース機能クラス |
|
|
regionコンポーネントのベース機能クラス |
|
|
resetコンポーネントのベース機能クラス |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tableコンポーネントのベース機能クラス |
|
|
|
|
|
|
|
|
valueコンポーネントのベース機能クラス |
表A-3には、コンポーネントの具体的なクラスに対応する機能が含まれています。
表A-3 コンポーネントの具体的な機能
| 名前 | コンポーネント |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表A-4には、動作に対応する機能が含まれています。
表A-4 動作のコンポーネントの機能
| 名前 | 動作 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表A-5には、フレームワーク・サービスに対応する機能が含まれています。
例A-11に、デフォルトのADF Facesのadf-js-partitions.xmlファイルを示します。独自のパーティション・ファイルを作成することでこのファイルのパーティションをオーバーライドできます。詳細は、A.9.2項「JavaScriptパーティションの作成方法」を参照してください。
例A-11 デフォルトのadf-js-partitions.xmlファイル
<?xml version="1.0" encoding="utf-8"?>
<partitions xmlns="http://xmlns.oracle.com/adf/faces/partition">
<partition>
<partition-name>boot</partition-name>
<feature>AdfBootstrap</feature>
</partition>
<partition>
<partition-name>core</partition-name>
<feature>AdfCore</feature>
<!-- Behavioral component super classes -->
<feature>AdfUIChoose</feature>
<feature>AdfUICollection</feature>
<feature>AdfUICommand</feature>
<feature>AdfUIDialog</feature>
<feature>AdfUIDocument</feature>
<feature>AdfUIEditableValue</feature>
<feature>AdfUIForm</feature>
<feature>AdfUIGo</feature>
<feature>AdfUIInput</feature>
<feature>AdfUIObject</feature>
<feature>AdfUIOutput</feature>
<feature>AdfUIPanel</feature>
<feature>AdfUIPopup</feature>
<feature>AdfUISelectBoolean</feature>
<feature>AdfUISelectInput</feature>
<feature>AdfUISelectOne</feature>
<feature>AdfUISelectMany</feature>
<feature>AdfUIShowDetail</feature>
<feature>AdfUISubform</feature>
<feature>AdfUIValue</feature>
<!-- These are all so common that we group them with core -->
<feature>AdfRichDocument</feature>
<feature>AdfRichForm</feature>
<feature>AdfRichPopup</feature>
<feature>AdfRichSubform</feature>
<feature>AdfRichCommandButton</feature>
<feature>AdfRichCommandLink</feature>
<!--
Dialog is currently on every page for messaging. No use
in putting these in a separate partition.
-->
<feature>AdfRichPanelWindow</feature>
<feature>AdfRichDialog</feature>
<!-- af:showPopupBehavior is so small/common, belongs in core -->
<feature>AdfShowPopupBehavior</feature>
</partition>
<partition>
<partition-name>accordion</partition-name>
<feature>AdfRichPanelAccordion</feature>
</partition>
<partition>
<partition-name>border</partition-name>
<feature>AdfRichPanelBorderLayout</feature>
</partition>
<partition>
<partition-name>box</partition-name>
<feature>AdfRichPanelBox</feature>
</partition>
<partition>
<partition-name>calendar</partition-name>
<feature>AdfUICalendar</feature>
<feature>AdfRichCalendar</feature>
<feature>AdfCalendarDragSource</feature>
<feature>AdfCalendarDropTarget</feature>
</partition>
<partition>
<partition-name>collection</partition-name>
<feature>AdfUIDecorateCollection</feature>
<feature>AdfRichPanelCollection</feature>
</partition>
<partition>
<partition-name>color</partition-name>
<feature>AdfRichChooseColor</feature>
<feature>AdfRichInputColor</feature>
</partition>
<partition>
<partition-name>date</partition-name>
<feature>AdfRichChooseDate</feature>
<feature>AdfRichInputDate</feature>
</partition>
<partition>
<partition-name>declarativeComponent</partition-name>
<feature>AdfUIInclude</feature>
<feature>AdfUIDeclarativeComponent</feature>
<feature>AdfRichDeclarativeComponent</feature>
</partition>
<partition>
<partition-name>detail</partition-name>
<feature>AdfRichShowDetail</feature>
</partition>
<partition>
<partition-name>dnd</partition-name>
<feature>AdfDragAndDrop</feature>
<feature>AdfCollectionDragSource</feature>
<feature>AdfStampedDropTarget</feature>
<feature>AdfCollectionDropTarget</feature>
<feature>AdfAttributeDragSource</feature>
<feature>AdfAttributeDropTarget</feature>
<feature>AdfComponentDragSource</feature>
<feature>AdfDropTarget</feature>
</partition>
<partition>
<partition-name>detailitem</partition-name>
<feature>AdfRichShowDetailItem</feature>
</partition>
<partition>
<partition-name>file</partition-name>
<feature>AdfRichInputFile</feature>
</partition>
<partition>
<partition-name>form</partition-name>
<feature>AdfRichPanelFormLayout</feature>
<feature>AdfRichPanelLabelAndMessage</feature>
</partition>
<partition>
<partition-name>format</partition-name>
<feature>AdfRichOutputFormatted</feature>
</partition>
<partition>
<partition-name>frame</partition-name>
<feature>AdfRichInlineFrame</feature>
</partition>
<partition>
<partition-name>header</partition-name>
<feature>AdfRichPanelHeader</feature>
<feature>AdfRichShowDetailHeader</feature>
</partition>
<partition>
<partition-name>imagelink</partition-name>
<feature>AdfRichCommandImageLink</feature>
</partition>
<partition>
<partition-name>iedit</partition-name>
<feature>AdfInlineEditing</feature>
</partition>
<partition>
<partition-name>input</partition-name>
<feature>AdfRichInputText</feature>
<feature>AdfInsertTextBehavior</feature>
</partition>
<partition>
<partition-name>label</partition-name>
<feature>AdfRichOutputLabel</feature>
</partition>
<partition>
<partition-name>list</partition-name>
<feature>AdfRichPanelList</feature>
</partition>
<partition>
<partition-name>lov</partition-name>
<feature>AdfUIInputPopup</feature>
<feature>AdfRichInputComboboxListOfValues</feature>
<feature>AdfRichInputListOfValues</feature>
</partition>
<partition>
<partition-name>media</partition-name>
<feature>AdfRichMedia</feature>
</partition>
<partition>
<partition-name>message</partition-name>
<feature>AdfUIMessage</feature>
<feature>AdfUIMessages</feature>
<feature>AdfRichMessage</feature>
<feature>AdfRichMessages</feature>
</partition>
<partition>
<partition-name>menu</partition-name>
<feature>AdfRichCommandMenuItem</feature>
<feature>AdfRichGoMenuItem</feature>
<feature>AdfRichMenuBar</feature>
<feature>AdfRichMenu</feature>
</partition>
<partition>
<partition-name>nav</partition-name>
<feature>AdfUINavigationPath</feature>
<feature>AdfUINavigationLevel</feature>
<feature>AdfRichBreadCrumbs</feature>
<feature>AdfRichCommandNavigationItem</feature>
<feature>AdfRichNavigationPane</feature>
</partition>
<partition>
<partition-name>note</partition-name>
<feature>AdfRichNoteWindow</feature>
</partition>
<partition>
<partition-name>poll</partition-name>
<feature>AdfUIPoll</feature>
<feature>AdfRichPoll</feature>
</partition>
<partition>
<partition-name>progress</partition-name>
<feature>AdfUIProgress</feature>
<feature>AdfRichProgressIndicator</feature>
</partition>
<partition>
<partition-name>print</partition-name>
<feature>AdfShowPrintablePageBehavior</feature>
</partition>
<partition>
<partition-name>scrollComponentIntoView</partition-name>
<feature>AdfScrollComponentIntoViewBehavior</feature>
</partition>
<partition>
<partition-name>query</partition-name>
<feature>AdfUIQuery</feature>
<feature>AdfRichQuery</feature>
<feature>AdfRichQuickQuery</feature>
</partition>
<partition>
<partition-name>region</partition-name>
<feature>AdfUIRegion</feature>
<feature>AdfRichRegion</feature>
</partition>
<partition>
<partition-name>reset</partition-name>
<feature>AdfUIReset</feature>
<feature>AdfRichResetButton</feature>
</partition>
<partition>
<partition-name>rte</partition-name>
<feature>AdfRichTextEditor</feature>
<feature>AdfRichTextEditorInsertBehavior</feature>
</partition>
<partition>
<partition-name>select</partition-name>
<feature>AdfRichSelectBooleanCheckbox</feature>
<feature>AdfRichSelectBooleanRadio</feature>
<feature>AdfRichSelectManyCheckbox</feature>
<feature>AdfRichSelectOneRadio</feature>
</partition>
<partition>
<partition-name>selectmanychoice</partition-name>
<feature>AdfRichSelectManyChoice</feature>
</partition>
<partition>
<partition-name>selectmanylistbox</partition-name>
<feature>AdfRichSelectManyListbox</feature>
</partition>
<partition>
<partition-name>selectonechoice</partition-name>
<feature>AdfRichSelectOneChoice</feature>
</partition>
<partition>
<partition-name>selectonelistbox</partition-name>
<feature>AdfRichSelectOneListbox</feature>
</partition>
<partition>
<partition-name>shuttle</partition-name>
<feature>AdfUISelectOrder</feature>
<feature>AdfRichSelectManyShuttle</feature>
<feature>AdfRichSelectOrderShuttle</feature>
</partition>
<partition>
<partition-name>slide</partition-name>
<feature>AdfRichInputNumberSlider</feature>
<feature>AdfRichInputRangeSlider</feature>
</partition>
<partition>
<partition-name>spin</partition-name>
<feature>AdfRichInputNumberSpinbox</feature>
</partition>
<partition>
<partition-name>status</partition-name>
<feature>AdfRichStatusIndicator</feature>
</partition>
<partition>
<partition-name>stretch</partition-name>
<feature>AdfRichDecorativeBox</feature>
<feature>AdfRichPanelSplitter</feature>
<feature>AdfRichPanelStretchLayout</feature>
<feature>AdfRichPanelDashboard</feature>
<feature>AdfPanelDashboardBehavior</feature>
<feature>AdfDashboardDropTarget</feature>
</partition>
<partition>
<partition-name>tabbed</partition-name>
<feature>AdfUIShowOne</feature>
<feature>AdfRichPanelTabbed</feature>
</partition>
<partition>
<partition-name>table</partition-name>
<feature>AdfUIIterator</feature>
<feature>AdfUITable</feature>
<feature>AdfUITable2</feature>
<feature>AdfUIColumn</feature>
<feature>AdfRichColumn</feature>
<feature>AdfRichTable</feature>
</partition>
<partition>
<partition-name>toolbar</partition-name>
<feature>AdfRichCommandToolbarButton</feature>
<feature>AdfRichToolbar</feature>
</partition>
<partition>
<partition-name>toolbox</partition-name>
<feature>AdfRichToolbox</feature>
</partition>
<partition>
<partition-name>train</partition-name>
<feature>AdfUIProcess</feature>
<feature>AdfRichCommandTrainStop</feature>
<feature>AdfRichTrainButtonBar</feature>
<feature>AdfRichTrain</feature>
</partition>
<partition>
<partition-name>tree</partition-name>
<feature>AdfUITree</feature>
<feature>AdfUITreeTable</feature>
<feature>AdfRichTree</feature>
<feature>AdfRichTreeTable</feature>
</partition>
<!--
Some components which typically do have client-side representation,
but small enough that we might as well download in a single partition
in the event that any of these are needed.
-->
<partition>
<partition-name>uncommon</partition-name>
<feature>AdfRichGoButton</feature>
<feature>AdfRichIcon</feature>
<feature>AdfRichImage</feature>
<feature>AdfRichOutputText</feature>
<feature>AdfRichPanelGroupLayout</feature>
<feature>AdfRichSeparator</feature>
<feature>AdfRichSpacer</feature>
<feature>AdfRichGoLink</feature>
</partition>
<partition>
<partition-name>eum</partition-name>
<feature>AdfEndUserMonitoring</feature>
</partition>
<partition>
<partition-name>ads</partition-name>
<feature>AdfActiveDataService</feature>
</partition>
<partition>
<partition-name>automation</partition-name>
<feature>AdfAutomationTest</feature>
</partition>
</partitions>