0
votes
<h:form id="form">
        <p:messages />
        <p:panel header="Análise">
            <h:outputText value="Mês da análise: " />

            <p:selectOneMenu value="#{report005.selectedMes}">
                <f:selectItems var="data" value="#{report005.analiseMeses}" itemLabel="#{report005.formataDataCombo(data)}" />
                <f:convertDateTime pattern="MM/yyyy" />
            </p:selectOneMenu>

            <p:commandButton value="Análises" update="analiseTable" actionListener="#{report005.loadAnalise()}" />

            <p:dataTable id="analiseTable" var="pes" value="#{report005.analiseModel}" selection="#{report005.selectedAnalise}" emptyMessage="Não há registros...">

                <p:column selectionMode="multiple" style="width:18px" />

                <p:ajax event="rowSelectCheckbox" listener="#{report005.loadAnaliseProduto()}" update="produtosmanycheck" />

                <p:column headerText="Código">  
                    #{pes.cod_analise}  
                </p:column>

                <p:column headerText="Nome">  
                    #{pes.dsc_analise}  
                </p:column>

                <p:column headerText="Descrição">  
                    #{pes.dsc_resumida_acao}  
                </p:column>

                <p:column headerText="Planejamento">
                    <h:outputText value="#{pes.dat_planejamento_analise}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                </p:column>

            </p:dataTable>
        </p:panel>
        <p:panel header="Produto Gerencial">

            <p:selectManyCheckbox id="produtosmanycheck" value="#{report005.selectedProduto}" layout="pageDirection">
                <f:selectItems id="teste" value="#{report005.produtos}" />
            </p:selectManyCheckbox>

        </p:panel>
        <p:commandButton value="Enviar" action="#{report005.send}" ajax="false" />
    </h:form>

Whan the AJAX event "rowSelectCheckbox" is fired, it does not find the 'produtosmanycheck' component to update, returning the following error to me:

javax.faces.FacesException: Cannot find component with identifier "produtosmanycheck" referenced from "form:analiseTable". at org.primefaces.util.ComponentUtils.findClientIds(ComponentUtils.java:251) at org.primefaces.util.AjaxRequestBuilder.addIds(AjaxRequestBuilder.java:102) at org.primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:90)

I already tried= :form:produtosmanycheck, form:produtosmanycheck, :produtosmanycheck, produtosmanycheck

I tried removing the FORM id too... without success...

What am I doing wrong? I can't update any component but the DataTable...

3
@BalusC I opened the html of the generated page, and this is the code generated for my selectManyCheckbox: <table id="form:produtosmanycheck" class="ui-selectmanycheckbox ui-widget"></table>BBacon
Don't you have nested forms, do you ?Fallup
Yes, 1 nested. prependId set to False.BBacon
when you look at the component in browser's page source what id do you see?velo

3 Answers

5
votes

You can reach that produtosmanycheck using :form:produtosmanycheck

EDIT: Nested forms will not work properly and give all kinds of DOM issues like the one you're experiencing. Work out a way to separate your view components into separate forms and then try the above named access.

3
votes

Have you tried putting the id "produtosmanycheck" on the parent p:panel element instead of on the p:selectManyCheckbox itself?

Form nesting should never be done in JSF even with prepend ID false as it will cause unexpected or no behaviour.

3
votes

I will post my own answer (in the end I came up with nested forms idea) as well as voting up @kolossus because he was basically right and couldn't know about nested forms.

Nested forms aren't the "thing" of JSF only (as it may seem from @JordanDenison answer), it is a general rule of HTML --> nesting forms is forbidden in HTML !

You may want to read this nesting forms in HTML