0

在 JSF 2.2 中,我有一个自定义复合组件,它包装了一个 vanilla 组件(比如说 a h:commandLink)。

是否可以在我的复合组件上添加直通属性并将它们传递回包装的组件?

像这样的东西(这是一个例子,不要担心它的无用):

声明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="…" />
4

2 回答 2

2

因此,在@Kukeltje 评论之后,我设法使用自定义复合组件支持类做一些事情:

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

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

唉,Eclipse 不理解这个技巧,并在看到所有这些“未知属性 'a:something'”时触发警告。

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

于 2018-03-30T15:22:56.870 回答
1

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

于 2018-04-01T11:56:52.873 回答