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 に答える