Como ajax atualizar um item no rodapé de uma dataTable do PrimeFaces?
Este é um visual da tabela que tenho:
+---------+------------+-------------------+ | Header1 | Header2 | Header3 | +---------+------------+-------------------+ | Row A | Input A | Calc'ed output A | | Row B | Input B | Calc'ed output B | | etc.. | etc.. | etc.. | +---------+------------+-------------------+ | Total: Total calc'ed output | +------------------------------------------+
E o código simplificado:
<p:dataTable id="myTable" value="#{myBean.someList}"
var="currentItem">
<p:column headerText="Header1">
<h:outputText value="#{currentItem.name}" />
</p:column>
<p:column headerText="Header2">
<pe:inputNumber value="#{currentItem.inputVal}">
<p:ajax event="change" listener="#{myBean.changeListener}"
update="outputVal outputTotal" />
</pe:inputNumber>
</p:column>
<p:column headerText="Header3">
<h:outputText id="outputVal" value="#{currentItem.outputVal}" />
</p:column>
<f:facet name="footer">
Total:
<h:outputText id="outputTotal" value="#{myBean.total}" />
</f:facet>
</p:dataTable>
omyBean.someList
é umArrayList<SomeOtherBean>
com uma String e dois Inteiros, com apenas getters e setters. omyBean.changeListener
calcula o segundo inteiro a partir do primeiro para a linha especificada e também o total para todas as linhas.
Então, quando eu digito uma das entradas, então o foco é chamado e o cálculo é feito, mas na tela o valor na terceira coluna muda, mas o total teimosamente permanece zero. Tenho certeza de que isso tem algo a ver com o PrimeFaces anexando o índice de linha aos IDs gerados de cada entrada e saída, mas não consigo descobrir como chegar à saída no rodapé (cujo ID gerado émainForm:myTable:0:outputTotal
)
Agora, eu poderia apenas atualizar a tabela pai. No entanto, sempre que a entrada para receber o foco faz parte do destino da atualização, o foco é perdido e estou sob regras de acessibilidade extremamente rígidas que esta tabeladevo seja amigável com o teclado (digite um número, guia, digite um número, guia, etc ...)
Eu tentei:
update = ": outputTotal" (deu a exceção Não foi possível encontrar o componente com o identificador ...)update = "myTable: 0: outputTota (mesma exceção)update = "myTable: outputTotal" (sem atualização, o total permanece zero)agrupar o texto em um panelGroup e atualizar isso (sem atualização)(PrimeFaces 3.5.0 com versão desconhecida do MyFaces)