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”组件更新,返回下面的错误对我说:Primefaces没有更新任何组件,除了本身的DataTable AJAX

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)

我已经尝试过=:形式:produtosmanycheck,形式:produtosmanycheck,:produtosmanycheck,produtosmanycheck

我试着删除表单ID太...没有成功...

我在做什么错?我不能更新任何组件,但数据表...

+0

相关:http://*.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-标识符/ 8644762#8644762 – BalusC

+0

@BalusC我打开所产生的页的HTML,这是我的selectManyCheckbox生成的代码: – MBarni

+0

你没有_nested_'形式吗,是吗? – Fallup

你有没有尝试把ID“produtosmanycheck”在父p:面板元素而不是在p:selectManyCheckbox本身?

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

+1

不应该只在JSF中完成表单嵌套。答案的第一部分与实际问题无关。 – Fallup

可以达到,使用produtosmanycheck:form:produtosmanycheck

编辑:嵌套表格将正常工作,并给予各种像你所遇到的一个问题DOM。找出一种方法将视图组件分离为不同的表单,然后尝试上述命名访问。

+0

这应该肯定有效。如果它不适合你@MBARIi,那么你检查错了,或者你有另一个问题。再试一次,看看是否出现了javax.faces.FacesException或者它是否没有更新。 – Fallup

+0

没有。问题依然存在: > javax.faces.FacesException:无法找到标识为 的组件:“form:produtosmanycheck”引用自“form:analiseTable”。 \t在 > org.primefaces.util.ComponentUtils.findClientIds(ComponentUtils.java:251) > \t在 > org.primefaces.util.AjaxRequestBuilder.addIds(AjaxRequestBuilder.java:102) > \t在 >有机primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:90) – MBarni

+0

@MBarni在窗体上设置'prependId = false' – kolossus

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

嵌套forms不仅仅是JSF的“东西”(因为它可能来自@JordanDenison答案),它是HTML的一般规则 - >嵌套forms在HTML中是被禁止的!

您可能需要阅读本nesting forms in HTML