2011-10-05 49 views
3

我想从dataTable里面的graphicImage更新一个dataTable。我尝试了很多f:ajax渲染值的组合,但没有成功,现在我使用PrimeFaces的p:component函数,但是之前我得到了同样的错误。我收到此错误的浏览器:JSF f:ajax无法找到上下文的组件

F:AJAX包含未知的ID“j_idt690:painelTabelaAPDespesa” - 不能在j_idt735

的代码,我用它来刷新组件的情况下找到它:

<f:ajax event="click" render="#{p:component('painelTabelaAPDespesa')}" 
        listener="#{itensAPDespesa.removerItem(item)}" /> 

你怎么看F:AJAX是一种graphicImage的,这是一个数据表里面里面。

<h:panelGroup id="painelTabelaAPDespesa"> 
     <p:dataTable id="tabelaAPDespesa" value="#{itensAPDespesa.itens}" 
      var="item"> 
      <p:column> 
       #{itensAPDespesa.itens.indexOf(item)+1} 
      </p:column> 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Número" /> 
       </f:facet> 
       <hrgi:editableText style="width:33%" 
        value="#{item.numeroDocumento}" /> 
      </p:column> 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Vencimento" /> 
       </f:facet> 
       <hrgi:editableDate style="width:33%" value="#{item.dataVencimento}" /> 
      </p:column> 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Valor" /> 
       </f:facet> 
       <hrgi:editableCurrency style="width:33%" value="#{item.valor}"> 
        <f:ajax render="@form" event="blur" 
         listener="#{itensAPDespesa.adicionarItem(item)}" 
         onevent="mudarFocoParaCampoInexistente(this.id)" /> 
       </hrgi:editableCurrency> 
      </p:column> 
      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Remover" /> 
       </f:facet> 
       <h:graphicImage library="img" name="default_trash.png" 
        style="cursor:pointer;"> 
        <f:ajax event="click" render="#{p:component('painelTabelaAPDespesa')}" 
         listener="#{itensAPDespesa.removerItem(item)}" /> 
       </h:graphicImage> 
      </p:column> 
     </p:dataTable> 
     <h:outputLabel 
      value="Total: #{modeloPopupRegistroDespesa.valorTotal}"> 
      <f:convertNumber type="currency" currencyCode="BRL" 
       currencySymbol="R$" maxFractionDigits="2" minFractionDigits="2" /> 
     </h:outputLabel> 
    </h:panelGroup> 

这大概是造成,因为它不知道它是我想要呈现组件里面,所以我怎么能刷新这个组件(在这种情况下DataTable的母公司)?

回答

5

你可以绑定组件的视图,并引用其UIComponent#getClientId()render代替:

<h:panelGroup id="painelTabelaAPDespesa" binding="#{painel}"> 
    <p:dataTable id="tabelaAPDespesa" value="#{itensAPDespesa.itens}" var="item"> 
     ... 
     <f:ajax render=":#{painel.clientId}" ... /> 
     ... 
    </p:dataTable> 
</h:panelGroup> 
+0

再次感谢BalusC。第一种方法没有重做任何东西,但第二种方法解决了我的问题。 – brevleq

+0

不客气。我从答案中删除了第一种方法。 – BalusC

+0

男人,这里同样的问题,确实对我来说非常不直观。像魅力一样工作! – RMalke

0

的PrimeFaces <p:ajax>组件具有一点智能背景独立的组件定位算法。你可以尝试使用它。

<h:panelGroup id="painelTabelaAPDespesa"> 
    <p:dataTable id="tabelaAPDespesa" value="#{itensAPDespesa.itens}" var="item"> 
     ... 
     <p:ajax update="painelTabelaAPDespesa" ... /> 
     ... 
    </p:dataTable> 
</h:panelGroup>