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で使用されます。
FaceletsViewHandler
com.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>