showPrintablePageBehaviorタグを使用してページを印刷する方法および要求パラメータorg.apache.myfaces.trinidad.agent.email=trueを使用して電子メール送信可能なページを作成する方法が含まれます。
この章の内容は次のとおりです。
ADF Facesでは、ページを印刷または電子メール用に簡略化されたモードで出力できます。たとえば、ユーザーがページ(またはページの一部)を印刷できるようにし、ただしWebブラウザでレンダリングされているとおりにページを印刷するのではなく、スクロール・バーやボタンなど、印刷ページに必要ないアイテムを削除することができます。ページが電子メールで送信される場合は、電子メール・クライアントが正しく表示できるようにページを簡略化する必要があります。
注意:
デフォルトでは、ADF Facesフレームワークによりアプリケーションが検索エンジンによってクロール中であると検出されると、クローラ用に電子メール用のページに似た簡略化された形式でページが出力されます。Web Crawlerの専用コンテンツを生成する場合、ELでアクセス可能なAgentインタフェースを使用して、サイトをクロール中であるエージェントを検出し、次のように指定したリンクへエージェンを転送します。
<c:if test="#{requestContext.agent.type == 'webcrawler'}">
<af:link text="This Link is rendered only for web crawlers"
destination="http://www.newPage.com"/>
</c:if>
詳細は、『Trinidad Javadoc』を参照してください。
印刷可能なページを表示するために、ADF FacesにはshowPrintablePageBehaviorタグがあり、コマンド・コンポーネントとともに使用すると、ユーザーはブラウザに簡略バージョンのビューを表示して、それを印刷できます。
メールに対応する場合、ADF Facesでは、Microsoft Outlook 2007、Mozilla Thunderbird 10.0.5、あるいはGmail電子メール・クライアントのいずれかの表示に適したページへの変換に使用できるAPIが提供されます。
ヒント:
現行の出力モード(emailまたはprintable)には、AdfFacesContextから入ることができます。このコンテキストはELでアクセスできるため、ELを使用してJSPページの出力モードにバインドできます。たとえば、次の式を使用して、現行モードがemailでない場合にのみ、図がレンダリングされるようにします。
<af:activeImage source="/images/stockChart.gif" rendered="#{adfFacesContext.outputMode != "email"}"/>
現行モードはAdfFacesContext.getOutputMode()を使用して確認できます。
大分部のWebページは、印刷または電子メールに適していませんが、ユーザーにはその機能が必要な場合があります。たとえば、File Explorerアプリケーションでは、buttonコンポーネントを、図40-1に示すように、表が含まれているpanelCollectionコンポーネントのツールバー内に配置できます。
図40-1 ページの一部を印刷するためのボタン

ユーザーがボタンをクリックすると、ページが新規のウィンドウ(ブラウザによってはタブ)に、図40-2のように簡略化された形で表示されます。
図40-2 ページの印刷可能なバージョン

表の内容のみが印刷用に表示されます。ツールバー、ボタン、スクロール・バーなどの不要なコンポーネントはすべてレンダリングされません。
アプリケーション内のページを電子メールで送信することが必要になる場合があります。たとえば、Web上で作成された注文書は、多くの場合、セッションの最後に購入者に電子メールで送信されます。しかし、電子メール・クライアントでWebブラウザへのレンダリングに使用される外部スタイルシートがサポートされていないために、正しくレンダリングされないという理由で、同じページを電子メールで送信できません。
図40-3に示すように、発注書が表示されたページがあるとします。
図40-3 注文書のWebページ

ユーザーが上部の「電子メール可能なページ」リンクをクリックすると、actionListenerメソッドまたは別のサービスによりorg.apache.myfaces.trinidad.agent.email=trueが現行のURLに追加され、ページが電子メールで送信されます。図40-4に、メール・クライアントに表示されるページを示します。
図40-4 メール・クライアントのページ

ADF Facesフレームワークを使用すると、showPrintablePageBehaviorタグをコマンド・コンポーネントの子として置く場合に、印刷に適したバージョンのページを印刷できます。クリックすると、フレームワークは、printableBehaviorタグに対する親のコンポーネントから始まるコンポーネント・ツリーを、panelSplitter、panelAccordionまたはpopupコンポーネント、あるいはツリーのルート(いずれか早い方)に到達するまで上っていきます。ツリーはそこからレンダリングされます。さらに、印刷ページで不要なコンポーネント(ボタン、スクロール・バーなど)は省略されます。
コマンド・コンポーネントがクリックされると、アクション・イベントは取り消されます。かわりに、サーバーに対して、ページの印刷可能なバージョンが要求されます。
showPrintablePageBehaviorタグは、コマンド・コンポーネントの直接の子として使用されます。
始める前に:
コンポーネントが印刷送信可能なページでどのように表示されるかについて理解しておくと役立ちます。詳細は、「印刷用のページの表示」を参照してください。
showPrintablePageBehaviorタグを使用する手順:
アプリケーション内のページを電子メールで送信することが必要になる場合があります。たとえば、Web上で作成された注文書は、多くの場合、セッションの最後に購入者に電子メールで送信されます。しかし、電子メール・クライアントでWebブラウザへのレンダリングに使用される外部スタイルシートがサポートされていないために、正しくレンダリングされないという理由で、同じページを電子メールで送信できません。
ADF Facesフレームワークでは、JSFページの自動変換が行われるため、Microsoft Outlook 2007、Mozilla Thunderbird 10.0.5、およびGmailメール・クライアントで正しくレンダリングされます。
すべてのコンポーネントが電子メール・クライアントでレンダリングできるとはかぎりません。次のコンポーネントは変換できるため、電子メール・クライアントで正しくレンダリングできます。
document
panelHeader
panelFormLayout
panelGroupLayout
panelList
spacer
showDetailHeader
inputText (readOnlyとしてレンダリング)
inputComboBoxListOfValues (readOnlyとしてレンダリング)
inputNumberSlider (readOnlyとしてレンダリング)
inputNumberSpinbox (readOnlyとしてレンダリング)
inputRangeSlider (readOnlyとしてレンダリング)
outputText
selectOneChoice (readOnlyとしてレンダリング)
panelLabelAndMessage
image
tree
table
treeTable
column
link(テキストとしてレンダリング)
電子メール送信可能なページでは、table内のすべての行とtreeTable内のすべてのノードは、各ノードがページ内で制限まで展開された状態でレンダリングされます。表示するデフォルトの行数は50です。ビュー・オブジェクトが取得する行数の最大値は、データ・レイヤー(MaxFetchSizeプロパティで)、あるいはアプリケーション・レイヤー(adf-config.xmlに指定されるrowLimitプロパティで)によって制限されます。rowLimitプロパティは、アプリケーション内のすべてのビュー・オブジェクト問合せのグローバルな上限です。MaxFetchSizeが指定された場合、そのビュー・オブジェクトについてはrowLimitは無視されます。電子メール送信可能なページでは、表示する行数の最大値を表属性rowsを使用して指定することもできます。rowsの値は、MaxFetchSizeまたはrowLimitの定義された値より小さい場合のみ使用されます。treeおよびtreeTableでは、nonScrollableRowsを使用して表示する行数を制限します。
注意:
電子メール送信可能なページの作成中にPanelGroupLayoutコンポーネントを含める場合、HTMLソースの<table>… </table>要素内の<td width="100%"></td>エントリを削除します。そうしないと、フッター行が電子メール・クライアントで正しくレンダリングされません。デフォルトでは、電子メール対応ページは、内部のスタイルシートを使用するのではなく、関連するHTML要素のstyle属性に直接インラインで記述するスタイルで表示されます。web.xmlのパラメータoracle.adf.view.DEFAULT_EMAIL_MODEをinternalまたはinlineのいずれかに設定し、この動作を構成できます。
電子メールで送信されるページのURLにリクエスト・パラメータに追加することにより、ADF Facesフレームワークに対して、ページを電子メール・クライアントでレンダリングするために変換することを通知します。
始める前に:
コンポーネントが電子メール送信可能なページでどのように表示されるかについて理解しておくと役立ちます。詳細は、「電子メール送信可能なページの作成」を参照してください。
電子メール送信可能なページを作成する手順:
ページの開発を完了する前に、電子メール・クライアントでページがどのようにレンダリングされるかをテストすることもできます。これはButtonコンポーネントを使用すれば簡単にできます。
電子メール送信可能なページをテストする手順:
ADF Facesフレームワークがレンダー・レスポンス・フェーズでリクエスト・パラメータorg.apache.myfaces.trinidad.agent.email=trueを受信する場合、関連するフェーズ・リスナーは、フレームワークに次の操作の実行を通知する内部フラグを設定します。
HTMLからすべてのJavaScriptを削除します。
すべてのCSSをページに追加します。ただし、そのページに含まれるコンポーネントでグローバル・スタイルのもののみ(名前にパイプ文字(|)がないもの)。
HTMLからCSSリンクを削除します。
すべての相対リンクを絶対リンクに変換します。
絶対URLを持つイメージをレンダリングします。
内部のスタイルシートを作成するのではなく、各HTML要素にスタイルの情報をインライン化します。
また、パラメータoracle.adf.view.rich.render.emailContentType=multipart/relatedを追加する場合、フレームワークは、HTMLからMIME (multipart/related)に変換し、メールがオフラインで表示されるようにイメージを埋め込みます。リクエスト・パラメータは全体で次のようになります。
org.apache.myfaces.trinidad.agent.email=true&oracle.adf.view.rich.render.emailContentType=multipart/related