2

是否可以以可以将其放置在某些标签内的方式声明复合组件?

例如:

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

将是非法的,而:

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

将是合法的。

4

1 回答 1

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>

于 2012-07-29T16:53:37.873 回答