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

Jsf 是否可以在自定义复合组件中传递传递属性?,jsf,jsf-2.2,composite-component,passthrough-attributes,Jsf,Jsf 2.2,Composite Component,Passthrough Attributes,在JSF2.2中,我有一个定制的复合组件,它封装了一个普通组件(比如ah:commandLink) 是否可以添加我的复合组件并将它们传递回包装的组件 类似这样的东西(这是一个例子,不要担心它的无用性): my:commandLink的声明: 因此,在@Kukeltje的评论之后,我设法用一个定制的复合组件支持类做了一些事情: @FacesComponent("PassThrough") public class PassThroughComponent extends Component {

在JSF2.2中,我有一个定制的复合组件,它封装了一个普通组件(比如a
h:commandLink

是否可以添加我的复合组件并将它们传递回包装的组件

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

my:commandLink的声明


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

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

唉,Eclipse不理解这个技巧,看到所有这些“未知属性‘a:something’”就会触发警告


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

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

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

唉,Eclipse不理解这个技巧,看到所有这些“未知属性‘a:something’”就会触发警告


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

我认为JSF API缺少了这方面的帮助。可能类似于“insertPassthroughAttributes”,类似于cc:insertChildren。
也许OmniFaces可以将其原型化,我们可以将其添加到下一个JSF规范中。有人应该创建一个规范问题。

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

Styleclass和title是commandLink上的现有属性。你确定你的意思是JSF2.2意义上的“passThrough”吗?或者你只是想在你的
myCommandLink
上有一个动态数量的属性,所有这些属性都自动映射到
h:commandLink
的现有属性?我的例子很糟糕,我用了更多的外来属性对它进行了修改。其目的确实是将
my:commandLink
的所有未知属性映射到包装的
h:commandLink
我在谷歌上搜索了一点,并没有找到简单的东西(也不是复杂的东西)。但是,您是否有一个“固定”的组合上允许的属性列表,或者您是否可以定义它们(这对代码完成也有好处)。如果不是,我认为您需要添加一个自定义组件类:。如果可以的话,我想我有一个“解决方案”,这里的目的是处理任何passthrough属性(例如jQuery行为的大量
数据-
)。即使使用组件java类,我在google上也没有发现任何有用的东西。我很想知道你发现了什么:)是的。。。但是可能会添加检查哪些是传递…但是显式定义组件上的属性(没有数据前缀)也很好,这样您就可以完成代码了。。。在ide和自定义组件中,您可以通过
f:passThroughAttribute
标记添加所有组件,并向它们添加
数据-
前缀。(还有一个
f:passTroughAttributes
(复数)但是我没有找到一个
cc.passThroughAttrs
commandLink上的styleclass和title都是现有属性。你确定你的意思是JSF2.2意义上的“passThrough”吗?还是你只是想在
myCommandLink
上有一个动态数量的属性,所有属性都自动映射到现有属性
h:commandLink
的属性?我的示例非常糟糕,我用了更多的外来属性对其进行了修改。目的确实是将
My:commandLink
的所有未知属性映射到包装的
h:commandLink
我一直在用谷歌搜索,但没有找到简单的东西(也不是复杂的东西)。但是您是否有复合上允许的属性的“固定”列表,或者您是否可以定义它们(这也有助于代码完成)。如果没有,我认为您需要添加自定义组件类:。如果可以,我认为我有一个“解决方案”,这里的目的是处理任何传递属性(例如,对于jQuery行为,有大量的
数据-
)。我在google上找不到任何有用的东西,即使有一个组件java类。我很想知道你发现了什么:)是的……但可能需要添加检查哪些是传递……但要明确定义组件上的属性(没有数据前缀)也很好,因此您可以在ide和自定义组件中完成代码…您可以通过
f:passThroughAttribute
标记添加所有这些属性,并为它们添加
data-
前缀。(还有一个
f:passTroughAttributes
属性(复数)但是我没有找到一个
cc.passThroughAttrs
任何地方的PrimeFaces组件都是真正的组件而不是复合组件。这就是为什么我说要显式定义它们,如果您的命名空间适合复合属性,eclipse不应该抱怨PrimeFaces组件是真正的组件而不是复合组件。这就是为什么我说要显式定义它们正确地定义它们,如果您的名称空间适合复合属性,eclipse不应该抱怨这更多的是注释而不是答案;-P。在omnifaces页面上,您可以为JavaEE 9输入一个“poll”。-)是的,我应该把它添加为评论,抱歉:D这更像是一个评论而不是一个答案;-P。在omnifaces页面上,他们有一个“投票”,你可以输入JavaEE 9;-)是的,我应该将它添加为评论,抱歉:D
@FacesComponent("PassThrough")
public class PassThroughComponent extends Component
{
    @Override
    public void encodeBegin(FacesContext facesContext) throws IOException
    {
        super.encodeBegin(facesContext);
        findComponent("pass").getPassThroughAttributes().putAll(getPassThroughAttributes());
    }
}