JavaServer Faces 標準の書式付き出力コンポーネント
を「パレット」の「標準」カテゴリからビジュアルデザイナーにドラッグすることによって、書式付きの出力テキストフィールドを作成できます。書式付き出力コンポーネントは出力テキストコンポーネントに似た機能を提供しますが、コンポーネントの描画時にローカライズのパラメータを置換する機能も提供します。出力テキスト同様、書式付き出力は、HTML では <span> タグになります。
このコンポーネントは、拡張されたコンポーネントで、JSP コードの直接編集とリソースバンドルの知識が必要になります。「プロパティー」ウィンドウでこのコンポーネントのプロパティーを編集したり、ビジュアルデザイナーでコンポーネントを右クリックして「データにバインド」を選択し、データプロバイダにバインドしたりできます。
次に、このコンポーネントを使用する方法を簡単に説明します。
ページの「ソース」ビューでは、書式付き出力コンポーネントは、<h:outputFormat> という JavaServer Faces コンポーネントタグであり、このタグは、java.text.MessageFormat オブジェクトへの入力をその値とみなします。<h:outputFormat> タグ内に <f:param> タグを入れ子にして、パラメータ {0}、{1} などを置き換える値を指定することもできます。
有効なメッセージ構文についての詳細は、次の Web サイトにある java.text.MessageFormat の Javadoc ページを参照してください。
ローカライズとリソースバンドルについては、 のローカライズに関連したセクションを参照してください。
<f:loadBundle> との組み合わせでこの例を使ってメッセージ文字列を取得できますが、実際には書式付き出力コンポーネントを使用するために、必ずリソースバンドルを使わなければならないということではありません。
この例では、ユーザーのショッピングカート内の項目数を数える、count というセッション Bean に integer 型プロパティーが作成されていると仮定します (詳細は、「ナビゲータ」ウィンドウについてのセッション Bean の説明を参照)。この書式付き出力コンポーネントは、ショッピングカート内の項目数を表示します。
<h:outputFormat binding="#{Page1.formattedOutput1}"
id="formattedOutput1"
style="left: 216px; top: 360px; position: absolute"
value="You have {0} items in your shopping cart.">
<f:param value="#{SessionBean1.count}"/>
</h:outputFormat>
上記の例の文字列がリソースバンドル内の itemCount キーの下にある場合は、次のコードを使用できます。
<f:loadBundle basename="webapplication1.Bundle"
var="messages"/>
...
<h:outputFormat binding="#{Page1.formattedOutput1}"
id="formattedOutput1"
style="left: 216px; top: 360px; position: absolute"
value="#{messages.itemCount}">
<f:param value="#{SessionBean1.count}"/>
</h:outputFormat>
この例のコードが機能するには、あるいはアプリケーション内部にリソースバンドルを準備するほかのどのような場合も、リソースバンドルの作成と削除で説明するように、メッセージを含めるプロパティーファイルを作成する必要があります。
新しいプロパティーファイルを作成すると、プロパティーエディタでこのファイルが開きます。追加するプロパティーごとに「新規プロパティー」をクリックし、「新規プロパティー」ダイアログでキーと値を入力します。たとえば上記の例のプロパティーには itemCount というキーがあり、そのテキストは「You have {0} items in your shopping cart」になります。
アプリケーションの配備時には、<f:loadBundle> タグが読み込めるよう、このプロパティーファイルが WEB-INF/classes/<プロジェクト名> ディレクトリに自動的にコピーされます。詳細は、バンドルを読み込むコンポーネントを参照してください。