是否可以以这样的方式声明复合组件,使其可以放在某些标签内?
例如:
<span>
<n:myComponent/>
</span>
是非法的,而:
<div>
<n:myComponent/>
</div>
是合法的。
答案 0 :(得分:1)
不是在构建期间,但在渲染期间,您可以检查组件的兄弟姐妹。
public void encodeChildren(FacesContext context) {
List<UIComponent> children = getParent().getChildren();
// Loop over children until you find a child which equals to "this".
// Then check if the previous and next sibling contains <span> and </span>.
// ...
if (valid) {
super.encodeChildren(context);
} else {
throw new IllegalArgumentException("n:myComponent can't be placed inside <span>");
}
}
您可以在UINamingContainer
实施中执行此操作,@FacesComponent
引用<cc:interface componentType>
。