EGL を使用すると、 Web ブラウザーに表示される JSF コントロールの外観を動的に更新できます。 例えば、ユーザーが無効な情報をフィールドに入力した場合、テキスト・ボックスの色を変更することができます。
Faces JSP ページの JSF コンポーネントにアクセスするには、初めにそのコンポーネントの型の EGL 変数を定義します。EGL には、JSF コンポーネントを表すための ExternalType パーツがパッケージ com.ibm.egl.jsf に用意されています。次に、ページ上の JSF コンポーネントの完全な階層を表す変数を作成します。これは、コンポーネント・ツリー とも呼ばれます。 次に、コンポーネント・ツリーの findComponent() 関数を使用して、JSF コンポーネントを表す変数を実際の JSF コンポーネントに割り当てます。
controlVar = viewRoot.findComponent(controlName);
"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