我实现了一个简单的方法,它迭代 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 回答