2

我想创建一个可以与其他人一起迭代的复合组件。问题是复合组件是一个命名容器,一个简单的 selectOnMenu 更改和刷新其他 selectOnMenu 是不可能的,因为给 selectOnMenu 的“id”是combo1:combo并且看不到combo2:combo

最好的情况是form1:combo1and form1:combo2,然后 combo1 和 combo2 使用 uinamingcontainer h:form。该链接讨论了这一点,但没有解决方案。 https://cwiki.apache.org/MYFACES/create-a-non-namingcontainer-composite-component.html

再次尝试但不起作用。p:commandbutton在 CC 中看不到 div 的 id。 获取JSF2复合组件父级的clientId

<p:commandButton value="asd" partialSubmit="true" process="@this" update="fooId"/>  
    <cf:label id="fooId" title="xxxxx" />[index.xhtml]




<composite:interface componentType="RootComponent" preferred="false">
    <composite:attribute name="title" />
</composite:interface>

<composite:implementation>
<div id="#{cc.immediateParent.clientId}:#{cc.id}">
#{currentDate}
<h:panelGroup id="#{cc.clientId}" layout="block">
    <p:outputLabel id="#{cc.clientId}_lb" value="#{cc.attrs.title}">
        <composite:insertChildren />
    </p:outputLabel>
</h:panelGroup>
</div>
</composite:implementation>[label.xhtml](compositecomponent)
4

1 回答 1

5

复合组件真的需要命名容器接口吗?

是的。否则,当在同一个父命名容器中使用多个复合组件时,您最终会遇到来自复合组件实现的“重复组件 ID”错误。

如果您绝对肯定不想要NamingContainer基于组件的组件,那么请改为创建一个标记文件。它只需要一些.taglib.xml样板文件。

也可以看看:


再次尝试但不起作用。p:commandbutton在 CC 中看不到 div 的 id

您的复合实现无效。为了通过 ajax 正确引用复合材料,您需要一个纯 HTML<div>或一个<span>ID 为#{cc.clientId}.

例如

<composite:implementation>
    <div id="#{cc.clientId}">
        #{currentDate}
        <h:panelGroup layout="block">
            <p:outputLabel id="#{cc.clientId}_lb" value="#{cc.attrs.title}">
                <composite:insertChildren />
            </p:outputLabel>
        </h:panelGroup>
    </div>
</composite:implementation>

(I have by the way the impression that the <h:panelGroup> is superfluous, you can safely omit it; further the id="#{cc.clientId}_lb" can better be id="label" or something to minimize repetition/duplication)

See also:

于 2012-12-28T16:45:51.320 回答