在JSF中更新自己的复合组件中的表单

时间:2013-05-29 09:39:59

标签: ajax jsf-2 facelets composite-component

我有以下内容(简化,但可以证明问题)组件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,如上所示?

1 个答案:

答案 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>

另见: