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


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

当 AJAX 事件"rowSelectCheckbox"被触发时,它找不到要更新的"produtosmanycheck"组件,向我返回以下错误:

javax.faces.FacesException:找不到具有标识符的组件 "produtosmanycheck"引用自"form:analiseTable"。 在 org.primefaces.util.ComponentUtils.findClientIds(ComponentUtils.java:251) 在 org.primefaces.util.AjaxRequestBuilder.addIds(AjaxRequestBuilder.java:102) 在 org.primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:90)

我已经尝试过= :form:produtosmanycheck, form:produtosmanycheck,

:p rodutosmanycheck, produtosmanycheck

我也尝试删除表单 ID...没有成功...

我做错了什么?我无法更新除数据表以外的任何组件...

produtosmanycheck=">您可以使用

:form:produtosmanycheck

编辑:嵌套表单将无法正常工作,并给出各种DOM问题,例如您遇到的问题。找出一种方法将视图组件分离为单独的窗体,然后尝试上述命名访问。

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

即使前置 ID 为 false,也不应在 JSF 中执行表单嵌套,因为这会导致意外行为或无行为。

我将发布我自己的答案(最后我想出了嵌套forms的想法)以及投票@kolossus因为他基本上是对的,并且不知道嵌套forms

嵌套forms不仅仅是JSF的"东西"(从@JordanDenison答案来看),它是HTML的一般规则 ->嵌套forms在HTML中是被禁止的!

您可能想在 HTML 中阅读此嵌套表单

最新更新