0

I have the following (simplified, but the issue can be demonstrated) component my:slot

<composite:interface>
</composite:interface>
<composite:implementation>
  <h:panelGroup styleClass="xxx" layout="block">
    <composite:insertChildren/>
  </h:panelGroup>
</composite:implementation>

Now I want to ad forms to use this component with two forms:

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

With this code I get the error Cannot find component with identifier ":f4" referenced from "j_idt11:f3:j_idt12". It's ok if I use the h:form id="f4" outside of my:slot. How can I use h:form in own components like shown above?

Thor
  • 6,607
  • 13
  • 62
  • 96

1 Answers1

3

Composite components are by itself also naming containers like as <h:form>. Look in the generated HTML output. Their IDs are prepended to the ID of the children.

You need to give your composite component a fixed ID so that JSF won't autogenerate an unpredictable one and then reference it in the 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>

See also:

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555