JavaServer Faces 式言語

関連項目

ここでは、JavaServer Faces 1.1 式言語について説明します。JavaServer Faces 1.1 コンポーネントを使用する、J2EE 1.4 および J2EE 1.3 のプロジェクトでこの式言語を使用します。Java EE 5 のプロジェクトを使用している場合、コンポーネントは JavaServer Faces 1.2 コンポーネントで、統合式言語を使用します。この言語に関する記事については、次の Web ページを参照してください。

統合式言語の仕様の全体は、JavaServer Pages (JSP) 2.1 仕様をダウンロードする必要があります。JSP テクノロジおよびダウンロード用のリンクについては、次の Web ページを参照してください。

このトピックは、IDE によって作成される値バインド式を使わずに、独自の式を入力する必要がある上級ユーザーを対象としています。このページは、次の節で構成されています。

はじめに
JavaServer Faces EL の式構文
getValue の意味構文
setValue の意味構文
暗黙オブジェクト
リテラル
演算子
予約語

はじめに

JavaServer Faces には、Web アプリケーションのページで、ページ Bean、およびセッション Bean やアプリケーション Bean など、Web アプリケーションに関連付けられたほかの Bean 内の JavaBeans コンポーネントにアクセスするために使用する式言語 (JSF EL) があります。たとえば、コンポーネントの「 text 」プロパティーをデータプロバイダまたは JavaBean プロパティーにバインドするときなど、ほとんどの場合、IDE によって正しい式が指定されます。

コンポーネントのプロパティーをバインドするには、Visual Web JSF ページにそのコンポーネントを追加し、コンポーネントを右クリックして「プロパティーのバインド」を選択します。表示される「プロパティーのバインド」ダイアログで、コンポーネントのプロパティーを選択し、そのプロパティーをバインドする JavaBean のプロパティーを選択できます。

コンポーネントをデータベース表にバインドする例として、コードサンプルには、 静的テキスト コンポーネントを使用しています。コードサンプルの作成方法は、次のとおりです。

  1. 「静的テキスト」コンポーネント 出力テキストのアイコン を、「パレット」の「基本」カテゴリからビジュアルデザイナーの Visual Web JSF ページにドラッグします。
  2. を開いて、「Person」表を「Travel」データベースからコンポーネント上にドラッグ&ドロップします。

    IDE は自動的にデータベース表のデータプロバイダオブジェクトをページに追加し、「text」プロパティーをデータプロバイダの PERSON.PERSONID フィールドにバインドします。コンポーネントのテキストが 123 に変わります。

  3. コンポーネントを右クリックし、「データにバインド」を選択します。
  4. 「データにバインド」ダイアログで、データプロバイダの PERSON.NAME フィールドを選択し、「了解」をクリックして「text」プロパティーを正しいフィールドにバインドし直します。
  5. ページの上部にある JSP ボタンをクリックして、生成されたソースコードを確認します。

JSP エディタで生成されたコードは、次のようになります。

  <ui:staticText binding="#{Page1.staticText1}" 
   id="staticText1" 
   style="position: absolute; left: 216px; top: 192px" 
   text="#{Page1.personDataProvider.value['PERSON.NAME']}"/>

このあとの節で説明するように、JavaServer Faces の式言語の構文では区切り文字に #{} を使います。JavaServer Faces の式は、値バインド式 (UI コンポーネントまたはその値を外部データソースにバインド) またはメソッドバインド式 (バッキング Bean のメソッドを参照) のいずれかです。2.0 の式言語の混合リテラルや、評価の構文や演算子も使用できます。

JavaServer Faces EL の式構文

JSF EL を使って、JavaBeans をコンポーネントのプロパティーにバインドし、コンポーネントがさまざまなソースのデータにアクセスする方法を簡素化できます。JSF EL の式では、 #{expr}; という構文を使います。

値バインド式の構文は、次の点を除き、JavaServer Pages の仕様 (第 2 版) の第 2.3 節~第 2.9 節で定義されている式言語の式の構文と同じです。

区切り文字の違いに加えて、この 2 種類の式には、次の意味構文の違いもあります。

有効な値バインド式の例を示します。

   #{Page1.name}
   #{Foo.bar}
   #{Foo[bar]}
   #{Foo[“bar”]}
   #{Foo[3]}
   #{Foo[3].bar}
   #{Foo.bar[3]}
   #{Customer.status == ‘VIP’}
   #{(Page1.City.farenheitTemp - 32) * 5 / 9}
   Reporting Period: #{Report.fromDate} to #{Report.toDate}

setValue メソッドが呼び出される値バインド式では (たとえば、Update Model Values 段階での入力フィールドへの text プロパティーのバインド)、値バインド式の構文は、次のいずれかの形式に限られます。ここで expr-a は何らかのオブジェクトに評価される一般的な式で、value-b は識別子です。

   #{expr-a.value-b}
   #{expr-a[value-b]]
   #{value-b}

getValue の意味構文

ValueBinding インスタンスの getValue メソッドが呼び出され (たとえば、ページの表示中に、JSP タグ属性の式が評価されているとき)、式が評価され、その評価の結果が返されるとき、評価は次のように行われます。

setValue の意味構文

ValueBindingsetValue メソッドが呼び出されるとき (たとえば、Update Model Values 段階での入力フィールドへの「text」プロパティーのバインド)、前の節で説明したように値バインド式の構文が限られます。実装では、次の処理を行なって、#{expra.value-b} または #{expr-a[value-b]} の形式の式を評価する必要があります。

式全体が 1 つの識別子から構成される場合は、次の規則が適用されます。

暗黙オブジェクト

式言語では、次の暗黙オブジェクトが定義されています。

さまざまなスコープの変数にアクセスできるオブジェクト

式でこれらのオブジェクトを名前で参照すると、適切なオブジェクトが返されます。暗黙的なオブジェクトは、同じ名前の属性よりも優先されます。たとえば、#{facesContext} は、別の値を含む既存の facesContext 属性があっても、FacesContext オブジェクトを返します。

リテラル

式言語では次のリテラルが定義されています。

演算子

getValue の意味構文とその次の節で説明している . 演算子と [] 演算子に加えて、式言語には次の演算子があります。

演算子を優先順位の高い順に上から下、左から右に示します。

予約語

次の語は式言語用に予約されているので、識別子として使用できません。

および false le not
div ge lt null
empty gt mod or
eq instanceof ne true
関連項目
Visual Web JSF ページへのコンポーネントの追加
データへのコンポーネントのバインドについて
コンポーネントのプロパティーのバインド
ページについて

著作権と商標について