我正在尝试从dataTable内部的graphicImage更新一个dataTable。我尝试了很多f:ajax渲染值的组合,但是都没有成功,现在我使用的是PrimeFaces的p:component函数,但是之前遇到了相同的错误。我在浏览器中收到此错误:
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的父对象)?
您可以将组件绑定到视图,然后UIComponent#getClientId()在其中引用它render:
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>