是否可以以可以将其放置在某些标签内的方式声明复合组件?
例如:
<span>
<n:myComponent/>
</span>
将是非法的,而:
<div>
<n:myComponent/>
</div>
将是合法的。
是否可以以可以将其放置在某些标签内的方式声明复合组件?
例如:
<span>
<n:myComponent/>
</span>
将是非法的,而:
<div>
<n:myComponent/>
</div>
将是合法的。
不是在构建时,而是在渲染时,您可以检查组件的兄弟姐妹。
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>