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

时间:2018-03-30 08:10:58

标签: jsf jsf-2.2 composite-component passthrough-attributes

在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="…" />

2 个答案:

答案 0 :(得分:2)

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

MsgBox Split((Columns( 2734 ).Address(,0)),":")(0)

在我的组件中带有@FacesComponent("PassThrough") public class PassThroughComponent extends Component { @Override public void encodeBegin(FacesContext facesContext) throws IOException { super.encodeBegin(facesContext); findComponent("pass").getPassThroughAttributes().putAll(getPassThroughAttributes()); } } 的DOM元素,我可以将属性传递给它。

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

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

答案 1 :(得分:1)

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