このタグは、キャッシュのプロパティを指定します。
<afc:cache [duration="seconds"]
[varyBy="varyBy_param.varyBy_param_value [varyBy_param.varyBy_param_value...]"]
[searchKeys="searchKey [searchKey...]"]
[cacheMissOnRePost="true|false"]>
cacheable content
</afc:cache>
ページ・フラグメント全体にキャッシュ・プロパティを設定する場合は、<afc:cache>
タグを<f:view>
タグの直接の子として配置し、ページのコンテンツを<afc:cache>で囲みます。
page.jsp
<f:view> <afc:cache ...> cacheable page content </afc:cache> </f:view>
メイン・ページ内に含まれるフラグメントにキャッシュ・プロパティを設定する場合は、各フラグメントを開始タグ<afc:cache>
と終了タグ</afc:cache>
で囲みます。
page.jsp
<f:view> ... <afc:cache ...> cacheable fragment content </afc:cache> ... <afc:cache ...> cacheable fragment content </afc:cache> ... </f:view>
ページのサブページに存在し、メイン・ページからインクルード(<jsp:include>
)されたフラグメントにキャッシュ・プロパティを設定する場合は、<afc:cache>
タグを<f:subview>
タグの直接の子として配置し、そのフラグメントのコンテンツを<afc:cache>タグで囲みます。この方法で、キャッシュ可能なフラグメントを異なるページ間で共有できます。
page.jsp
<f:view> ... <afc:cache ...> cacheable fragment content </afc:cache> <jsp:include page="/fragment.jsp" /> <afc:cache ...> cacheable fragment content </afc:cache> ... </f:view> fragment.jsp <f:subview> <afc:cache ...> cacheable fragment content </afc:cache> </f:subview>
次の例は、AFCPortalDemo_Cache.war
から入手できるサンプル・ポータル・アプリケーションの抜粋です。AFCPortalDemo_Cache.warは、Oracle Technology Networkからダウンロードできます。URLは次のとおりです。
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/index.html
この例は、メイン・ポータル・ページMain.jsp
の抜粋です。3つのキャッシュ可能なパネルが含まれています。各パネルは、<afc:cache>
タグが付けられたキャッシュ可能なポートレットです。このタグには次の属性が指定されています。
duration
属性では、86,400秒後にページ・フラグメントが期限切れになることを指定しています。
searchKeys
属性では、左パネルに検索キー文字列oracle_news
とhoroscope
を、中央パネルに検索キー文字列java_news
とweather
を、右パネルに検索キー文字列world_news
とstocks
を割り当てています。
これらの検索キーを使用して、それぞれのフラグメントを失効化できます。
varyBy
属性では、MyPortalBean
Beanに基づいてパネルのバージョンをキャッシュすることを指定しています。MyPortalBean
Beanは、パネルに株、ニュース、占いおよび天気の情報を表示するかどうかを指定します。
cacheMissOnRePost
属性では、リクエストが再ポストである場合でも、キャッシュからパネルをフェッチすることを指定しています。
main.jsp
<f:view> ... <!-- The left panel --> <afc:cache id="LeftPortletCaching" duration="86400" searchKeys="oracle_news horoscope" varyBy="MyPortalBean.leftPane[0] MyPortalBean.leftPane[1]" cacheMissOnRePost="false"> <h:panelGroup> <h:dataTable value="#{MyPortalBean.componentListLeft}" var="var"> <h:column> <MyPortalTag:RenderPortlet type="#{var}" /> </h:column> </h:dataTable> <h:outputText value="Last updated at:" styleClass="styleBody" style="font-weight:normal"/> <h:outputText value="#{now}" styleClass="styleBody" style="font-weight:normal"> <f:convertDateTime pattern="hh:mm:ss a"/> </h:outputText> </h:panelGroup> </afc:cache> <!-- Center Panel --> <afc:cache id="CenterPortletCaching" duration="86400" searchKeys="java_news weather" varyBy="MyPortalBean.centerPane[0] MyPortalBean.centerPane[1]" cacheMissOnRePost="false"> <h:panelGroup> <h:dataTable value="#{MyPortalBean.componentListCenter}" var="var"> <h:column> <MyPortalTag:RenderPortlet type="#{var}" /> </h:column> </h:dataTable> <h:outputText value="Last updated at:" styleClass="styleBody" style="font-weight:normal"/> <h:outputText value="#{now}" styleClass="styleBody" style="font-weight:normal"> <f:convertDateTime pattern="hh:mm:ss a"/> </h:outputText> </h:panelGroup> </afc:cache> <!-- Right panel --> <afc:cache id="RightPortletCaching" duration="86400" searchKeys="world_news stocks" varyBy="MyPortalBean.rightPane[0] MyPortalBean.rightPane[1]" cacheMissOnRePost="false"> <h:panelGroup> <h:dataTable value="#{MyPortalBean.componentListRight}" var="var"> <h:column>
> </h:column> </h:dataTable> <h:outputText value="Last updated at:" styleClass="styleBody" style="font-weight:normal"/> <h:outputText value="#{now}" styleClass="styleBody" style="font-weight:normal"> <f:convertDateTime pattern="hh:mm:ss a"/> </h:outputText> </h:panelGroup> </afc:cache> </f:view>
このタグは、囲まれたコンポーネントのエンコーディングをキャッシュします。
<afc:cache>
タグの使用時には、次のことを考慮する必要があります。
1つのフラグメントを別のフラグメント内にネストできません。たとえば、<afc:cache>
タグを使用して、インクルードされたフラグメントが含まれるページ・フラグメントをキャッシュすることはできません。
page.jsp
<f:view> ... <afc:cache ...> ... <jsp:include page="/fragment.jsp" /> </afc:cache> ... </f:view> fragment.jsp <f:subview> <afc:cache ...> cacheable fragment content </afc:cache> </f:subview>
ネストされたフラグメントをコード化すると、フラグメントは、<afc:cache>
が存在しなかったように処理されます。前述の例を使用すると、キャッシュ・タグ・ハンドラは、ページとそのページにインクルードされたフラグメントの両方に対して、2つの独立したレスポンスではなく、1つのレスポンスのみを格納します。
<afc:cache>
タグは、繰り返しレンダリングする<h:dataTable>
などのコンポーネント内に含めないでください。
<afc:cache>
タグは、子レンダリング・タグであるため、フラグメントの本体にテンプレート・テキストを含めないでください。テンプレート・テキストを含める必要がある場合は、JSP <f:verbatim>
タグを使用してエスケープします。
duration
varyBy
これらの要素には、HTTPリクエスト・ヘッダー、Cookie、埋込みURLパラメータ、国のロケール、ユーザー・セッションまたはBeanプロパティを指定できます。式言語(EL)に類似した各要素は、varyBy_param
.varyBy_param_value
のように表され、次の組合せが可能です。
header.header_name
cookie.cookie_name
param.param_name
view.locale
request.session
managed_bean
.property
varyBy_param
. varyBy_param_value
は、ドット表記法で指定する必要があります。varyBy="cookie[name]"
などの配列表記法はサポートされません。たとえば、varyBy="cookie.user_name"
では、リクエストのuser_name
Cookieの値に基づいてフラグメントがキャッシュされます。
この属性が存在しない場合は、NULL値にデフォルト設定され、フラグメントの1つのバージョンのみがキャッシュされます。
param.param_name
では、POSTボディ・パラメータはサポートされません。この要素は埋込みURLパラメータに限定されます。
managed_bean
.property
で変化させる場合は、getProperty()
メソッドが、時間のかかる計算を実行していないことを確認してください。時間のかかる計算を実行している場合は、キャッシュのメリットがありません。このような場合は、managed_bean
.property
で変化させないでください。
searchKeys
検索キーは、Webページとフラグメントを様々なグループに編成するために使用します。特定グループのすべてのページに同じ検索キーを割り当てることができます。たとえば、検索キーbusiness_news
をビジネス・ニュースに関係するすべてのページに割り当てます。オブジェクトのグループを失効化するには、その特定グループに関連付けられている検索キーを指定した失効化リクエストを発行します。たとえば、失効化リクエストで検索キーbusiness_news
を指定すると、検索キーbusiness_news
が割り当てられたすべてのページが失効します。
1つのオブジェクトに複数の検索キーを割り当てることができます。たとえば、地方のスポーツ・チームに関する記事が掲載されているWebページには、検索キーlocal_news
とsports_news
を割り当てることができます。構成属性max-searchkeys
に指定した検索キーの制限を超えないようにしてください。この制限を超えると、そのフラグメントは、キャッシュ・タグ・ハンドラによってキャッシュされなくなります。
cacheMissOnRePost
<afc:cache>
タグで再ポストを処理するかどうかを指定します。再ポストは、アプリケーションによるリフレッシュ操作の実行やJSFによる失効化エラーの送信など、同じページからのポスト・バックによるリクエストです。
現在のリクエストが再ポストの場合はキャッシュからコンテンツをレンダリングせず、かわりにJSFエンコーディングを実行するように<afc:cache>
タグに指示する場合は、true
を指定します。つまり、このリクエストはキャッシュ・ミスとして処理されます。この値は、たとえば、問合せのリフレッシュなど、一部の計算を実行するボタンが含まれるフラグメントに適しています。
リクエストが再ポストの場合でもキャッシュからフラグメントをフェッチするように<afc:cache>
タグに指示する場合は、false
を指定します。この値は、単純な選択メニューなどが含まれる場合に適しています。バリデータまたはコンバータが関連付けられている入力フィールドが含まれたフラグメントに対して、この属性をfalse
に設定しないでください。
この属性のデフォルト値はtrue
です。
リファレンス: ADF Faces Cacheコンポーネント
キャッシュの一貫性について
コンテンツの失効化
ADF Faces Cacheの構成について
キャッシュ可能なADFコンポーネントのセキュリティ設定について
Copyright © 1997, 2006, Oracle. All rights reserved.