Jsf Primefaces DataTable ajax不更新除自身以外的任何组件

Jsf Primefaces DataTable ajax不更新除自身以外的任何组件,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,当AJAX事件rowSelectCheckbox被激发时,它找不到要更新的“ProdutsManyCheck”组件,并向我返回以下错误: javax.faces.FacesException:找不到标识符为的组件 ProdutsManyCheck引用自表单:analiseTable。在 org.primefaces.util.ComponentUtils.findclientiscomponentutils.java:251 在 org.primefaces.util.AjaxRequestBu

当AJAX事件rowSelectCheckbox被激发时,它找不到要更新的“ProdutsManyCheck”组件,并向我返回以下错误:

javax.faces.FacesException:找不到标识符为的组件 ProdutsManyCheck引用自表单:analiseTable。在 org.primefaces.util.ComponentUtils.findclientiscomponentutils.java:251 在 org.primefaces.util.AjaxRequestBuilder.addIdsAjaxRequestBuilder.java:102 在 org.primefaces.util.AjaxRequestBuilder.updateAjaxRequestBuilder.java:90

我已经试过=:form:produtsmanycheck,form:produtsmanycheck,:produtsmanycheck,produtsmanycheck

我也尝试删除表单id。。。没有成功


我做错了什么?除了DataTable,我无法更新任何组件…

您是否尝试将id ProdutsManyCheck放在父p:panel元素上,而不是放在p:selectManyCheckbox本身上

即使prepend ID为false,表单嵌套也不应该在JSF中完成,因为它将导致意外或无行为。

您可以使用:Form:produtsmanycheck访问该produtsmanycheck


编辑:嵌套表单将无法正常工作,并会出现与您遇到的问题类似的各种DOM问题。找到一种将视图组件分离为单独表单的方法,然后尝试上述访问方式。

最后我会发布自己的答案。我提出了嵌套表单的想法,并投票支持@kolossus,因为他基本上是对的,不知道嵌套表单

嵌套表单不仅仅是JSF的事情,正如@JordanDenison answer所说的那样,它是HTML的一般规则->在HTML中禁止嵌套表单


你可能想读一下这篇文章

这肯定行得通。如果@MBarni对你不起作用,那么你检查错了,或者你有另一个问题。再试一次,看看javax.faces.FacesException是否出现,或者它是否只是没有更新。问题仍然存在:>javax.faces.FacesException:找不到标识符为>:form:produtsmanycheck的组件,该组件引用自form:analiseTable。在>org.primefaces.util.ComponentUtils.findclientdiscomponentutils.java:251>在>org.primefaces.util.AjaxRequestBuilder.addIdsAjaxRequestBuilder.java:102>在>org.primefaces.util.AjaxRequestBuilder.java:90@MBarni在formIt上设置prependId=false不关于ID,禁止嵌套表单。@Fallup。我在问题中完全忽略了这一点。嵌套表单?见鬼,不!相关:@BalusC我打开了生成页面的html,这是为我的selectManyCheckbox生成的代码:你没有嵌套表单吗?是的,1个嵌套表单。prependId设置为False。当您在浏览器的页面源中查看组件时,您会看到什么id?表单嵌套永远都不应该做,不仅仅是在JSF中。你回答的第一部分也与实际问题无关。
<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>