コンポーネント・ツリーのアクセス

EGL を使用すると、 Web ブラウザーに表示される JSF コントロールの外観を動的に更新できます。 例えば、ユーザーが無効な情報をフィールドに入力した場合、テキスト・ボックスの色を変更することができます。

Faces JSP ページの JSF コンポーネントにアクセスするには、初めにそのコンポーネントの型の EGL 変数を定義します。EGL には、JSF コンポーネントを表すための ExternalType パーツがパッケージ com.ibm.egl.jsf に用意されています。次に、ページ上の JSF コンポーネントの完全な階層を表す変数を作成します。これは、コンポーネント・ツリー とも呼ばれます。 次に、コンポーネント・ツリーの findComponent() 関数を使用して、JSF コンポーネントを表す変数を実際の JSF コンポーネントに割り当てます。

JSF コントロールに変数を割り当てるには、次の構文を使用します。
   controlVar = viewRoot.findComponent(controlName);
controlVar
JSF コンポーネントを表す ExternalType 変数。
viewRoot
ページ上の JSF コンポーネント・ツリーを表す UIViewRoot 型の変数。 この変数は、viewRootVar JSF ハンドラーのプロパティーの値として設定する必要があります。
controlName
このコントロールを識別するストリング変数またはリテラル。ほとんどの場合は、一連の JSF コントロール ID を指定します。 このコントロール ID は、コンポーネント・ツリーのトップレベル書式の ID で始まり、特定のコントロール ID がそれに続きます。各 ID の間はコロン (:) で区切られています。 次のストリングは、form1 という名前のトップレベル書式の text1 という名前のテキスト・ボックスを参照します。
  "form1:text1"

この変数を JSF コントロールに割り当てた後、その変数に対する関数を使用して、JSF コンポーネントへの変更を行うことができます。 さまざまな型の JSF コントロールがあり、さまざまな関数を受け付けます。各型のコンポーネントが受け付けることのできる関数は、コンポーネントに対応する ExternalType パーツに含まれています。

JSF ハンドラー内のどの関数でも (ただし、onConstructionFunction プロパティーおよび onPreRenderFunction プロパティーに指定された関数、またはこれらの関数が呼び出すすべての関数は除きます)、これらの ExternalType パーツによって、JSF コンポーネントにアクセスできます。 これらの関数の実行時には、まだコンポーネント・ツリーがレンダリングされていません。そのため、この方法で JSF コンポーネントにアクセスしようとしても失敗します。 onPostRenderFunction プロパティーに指定されている関数は、JSF コンポーネント・ツリーにアクセスできます。 しかし、postrender 関数はページがレンダリングされてブラウザーに送信された後に呼び出されるため、ページの変更点は、そのページが最新表示されるまでユーザーには見えません。

以下のコードでは、UIViewRoot 変数を識別し、その変数を作成してテキスト入力フィールドにリンクしています。

import com.ibm.egl.jsf.HtmlInputText;
import com.ibm.egl.jsf.UIViewRoot;

Handler  handler01  type JSFHandler
         { viewRootVar=myViewRoot }

  myViewRoot UIViewRoot;

  function changeFieldColor()
    inputVar HtmlInputText;
    inputVar = myViewRoot.findComponent("form1:text1");
    inputVar.setStyle("color : red");
  end
end

フィードバック