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