我正在尝试从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的父级)?
答案 0 :(得分:5)
您可以将组件绑定到视图,并引用render
中的UIComponent#getClientId()
代替:
<h:panelGroup id="painelTabelaAPDespesa" binding="#{painel}">
<p:dataTable id="tabelaAPDespesa" value="#{itensAPDespesa.itens}" var="item">
...
<f:ajax render=":#{painel.clientId}" ... />
...
</p:dataTable>
</h:panelGroup>
答案 1 :(得分: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>