3

JSF コンポーネント ツリーを繰り返し処理し、コンポーネントを無効に設定する単純なメソッドを実装します。(したがって、ユーザーは値を変更できません)。ただし、この方法は複合コンポーネントでは機能しません。少なくとも複合コンポーネントを検出するにはどうすればよいですか? 次に、特別な属性を無効に設定してみます。

4

1 に答える 1

4

このUIComponentクラスには、isCompositeComponent()まさにこの目的のためのヘルパー メソッドがあります。

したがって、これは次のようにする必要があります。

for (UIComponent child : component.getChildren()) {
    if (UIComponent.isCompositeComponent(child)) {
        // It's a composite child!
    }
}

「内部」の仕組みに興味がある方は、Mojarra 2.1.25 の実装ソース コードを次に示します。

public static boolean isCompositeComponent(UIComponent component) {

    if (component == null) {
        throw new NullPointerException();
    }
    boolean result = false;
    if (null != component.isCompositeComponent) {
        result = component.isCompositeComponent.booleanValue();
    } else {
        result = component.isCompositeComponent =
                (component.getAttributes().containsKey(
                           Resource.COMPONENT_RESOURCE_KEY));
    }
    return result;

}

Resource.COMPONENT_RESOURCE_KEYしたがって、値がによって定義された名前を持つコンポーネント属性の存在によって識別されます"javax.faces.application.Resource.ComponentResource"

于 2013-08-16T11:53:09.353 に答える