是否可以在自定义复合组件中传递直通属性?

Is it possible to pass passthrough attributes in a custom composite component?

在 JSF 2.2 中,我有一个自定义复合组件,它包装了一个 vanilla 组件(假设是 h:commandLink)。

是否可以在我的复合组件上添加 passthrough attributes 并将它们传回包装组件?

类似这样的东西(只是一个例子,不要在意它的无用性):

my:commandLink的声明:

<cc:interface>
    <cc:attribute name="text" type="java.lang.String" />
</cc:interface>

<cc:implementation>
    <h:commandLink a:magicInsertionOfAllThePassThroughAttributes>
        #{cc.attrs.text}
    </h:commandLink>
</cc:implementation>

my:commandLink的使用:

<my:commandLink text="oh no" a:data-something="…" a:data-otherthing="…" />

因此,根据@Kukeltje 的评论,我设法使用自定义复合组件支持 class:

@FacesComponent("PassThrough")
public class PassThroughComponent extends Component
{
    @Override
    public void encodeBegin(FacesContext facesContext) throws IOException
    {
        super.encodeBegin(facesContext);
        findComponent("pass").getPassThroughAttributes().putAll(getPassThroughAttributes());
    }
}

我的组件中有一个带有 id='pass' 的 DOM 元素,我可以将属性传递给它。

唉,Eclipse 不懂这个把戏,看到这些就触发警告"unknown attribute 'a:something'"。

我真的很想知道 Primefaces 组件是如何设法避免这种情况的。

我认为 JSF API 为此缺少帮助程序。可能类似于 "insertPassthroughAttributes",类似于 cc:insertChildren。 也许 OmniFaces 可以对此进行原型设计,我们可以将其添加到下一个 JSF 规范中。有人应该创建规范问题。