我有以下内容(简化,但可以证明问题)组件my:slot
<composite:interface>
</composite:interface>
<composite:implementation>
<h:panelGroup styleClass="xxx" layout="block">
<composite:insertChildren/>
</h:panelGroup>
</composite:implementation>
现在我想要广告表单以两种形式使用此组件:
<my:slot>
<h:form id="f3">
<p:commandButton value="update f4" update=":f4"/>
</h:form>
</my:slot>
<my:slot>
<h:form id="f4">Form f4</h:form>
</my:slot>
使用此代码,我收到错误Cannot find component with identifier ":f4" referenced from "j_idt11:f3:j_idt12"
。如果我使用h:form id="f4"
之外的my:slot
,则可以。如何在自己的组件中使用h:form
,如上所示?
答案 0 :(得分:2)
复合组件本身也是naming containers,如<h:form>
。查看生成的HTML输出。他们的ID前置于孩子的ID。
您需要为复合组件提供固定ID,以便JSF不会自动生成不可预测的ID,然后在update
中引用它。
<my:slot id="slot1">
<h:form id="f3">
<p:commandButton value="update f4" update=":slot2:f4"/>
</h:form>
</my:slot>
<my:slot id="slot2">
<h:form id="f4">Form f4</h:form>
</my:slot>