属性のバインドを使用したプログラムによるコンポーネントの制御

コンポーネントのプロパティを動的に設定する場合は、コンポーネント・タグのbinding属性を使用します。たとえば、ユーザーが社内報にサイン・アップできるチェックボックスをページに表示するとします。この社内報は、管理従業員のみが使用できます。したがって、従業員が管理者でない場合、このチェックボックスは非表示にする必要があります。

JSPコードは、次のようになります。

<h:selectBooleanCheckbox binding="#{employee.managerLetter}" id="newsletter"/>
<h:outputLabel binding="#{employee.managerLetterText}" for="newsletter">
<h:outputText value="Subscribe to Management News"/>
</h:outputLabel>

このコードによって、newsletterコンポーネントは、employeeマネージドBeanのmanagerLetterプロパティの値にバインドされ、その出力ラベルはmanagerLetterTextプロパティにバインドされます。

EL式を使用してbinding属性の値にバッキングBeanのプロパティを設定する場合は、コンポーネント・インスタンスをそのプロパティにバインドします。コンポーネントがバインドされるバッキングBeanには、そのプロパティのgetterメソッドとsetterメソッドが含まれている必要があり、そのプロパティはコンポーネントと同じタイプであることが必要です。employee Beanのコードは、次のようになります。

private HtmlSelectBooleanCheckbox managerLetter;


public void setManagerLetter(HtmlSelectBooleanCheckbox managerLetter)
{
this.managerLetter = managerLetter;
} public HtmlSelectBooleanCheckbox getManagerLetter()
{
return managerLetter;
} private HtmlOutputLabel managerLetterText; public void setManagerLetterText(HtmlOutputLabel managerLetterText)
{
this.managerLetterText = managerLetterText;
} public HtmlOutputLabel getManagerLetterText()
{
return managerLetterText;
}

コンポーネント・インスタンスがプロパティにバインドされているため、メソッドでコンポーネント・インスタンスにアクセスして、コンポーネントのプロパティの値を変更できます。たとえば、デフォルトで、チェックボックスとそのラベルのrendered属性がtrueに設定されているとします。従業員が管理者でない場合にこれらを非表示にするように属性をfalseに設定するには、前述のsubmitメソッドで次の処理を実行します。

コードは、次のようになります。

public String submit() {
...
if(!employee.manager && managerLetter.isRendered())
{
managerLetter.setRendered(false);
managerLetterText.setRendered(false);
} ...

マネージドBeanおよびバッキングBeanの開発
タグ属性のバインドとコンポーネント・インスタンスのバインドの比較
値バインディングについて
プロパティへのコンポーネントの値バインド
プロパティへのコンポーネント・インスタンスのバインド
マネージドBeanについて