限制复合材料部件的放置

时间:2012-07-29 16:22:36

标签: jsf composite-component

是否可以以这样的方式声明复合组件,使其可以放在某些标签内?

例如:

<span>
    <n:myComponent/>
</span>

是非法的,而:

<div>
    <n:myComponent/>
</div>

是合法的。

1 个答案:

答案 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>