Bug dataTable primefaces?

A situação é a seguinte:
Tenho 6 registros em uma dataTable que possui paginação. O número de linhas para fazer a paginação é 5.
Então, na página 1 vai ficar 5 registros e na página 2 vai ficar somente 1.
Se eu for para a página 2 e excluir o registro, meu dataTable não renderiza e entende que agora ele deve retornar para a página 1 com os 5 registros.
Ele exclui o registro e fica como se a dataTable não tivesse nenhum registro, apenas um link na página 1, que ao clicar, ai sim ele renderiza e volta os 5 registros.
Isso é algum bug ou é alguma coisa que estou esquecendo de fazer?
Vou postar os códigos:

index.xhtml

<h:form>

	<h:panelGrid id="panelGridDataTable">

		<p:dataTable id="produtoDataTable" var="p"
			value="#{bean.produtosList}" paginator="true" rows="5"
			paginatorPosition="bottom"
			emptyMessage="Nenhum produto encontrado.">

			<p:column sortBy="#{p.id}">
				<f:facet name="header">
					<h:outputText value="ID" />
				</f:facet>
				<h:outputText value="#{p.id}" />
			</p:column>
			<p:column sortBy="#{p.nome}">
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{p.nome}" />
			</p:column>
			<p:column>
				<f:facet name="header">
					<h:outputText value="Ações" />
				</f:facet>
				<p:commandLink update=":form:confirmacaoExclusao"
					oncomplete="confirmacaoExclusao.show()">
					<h:graphicImage id="imagemExcluir"
						value="/resources/imagens/excluir.png" />
					<f:setPropertyActionListener value="#{p}"
						target="#{bean.produto}" />
				</p:commandLink>
				<p:tooltip for="imagemExcluir" value="Excluir" />
			</p:column>

		</p:dataTable>

	</h:panelGrid>

	<p:dialog id="confirmacaoExclusao" widgetVar="confirmacaoExclusao"
		header="Exclusão" showEffect="fade"
		hideEffect="fade" modal="true" resizable="false">

		<center>

			<br></br>

			<h:graphicImage value="/resources/imagens/aviso.png" />
			<p:spacer width="20" />
			<h:outputText value="Confirma exclusão?" />

			<br></br>

			<h:panelGrid id="confirmaExclusaoProdutoPanelGrid" columns="2"
				columnClasses="textoDireita" cellpadding="3">

				<h:outputText value="ID:" styleClass="negrito" />
				<h:outputText value="#{bean.produto.id}" />

				<h:outputText value="Nome:" styleClass="negrito" />
				<h:outputText value="#{bean.produto.nome}" />

			</h:panelGrid>

			<br></br>

			<p:commandButton action="#{bean.excluir}"
				oncomplete="confirmacaoExclusao.hide()"
				value="Sim" update="panelGridDataTable" />
			<p:spacer width="10" />
			<p:commandButton oncomplete="confirmacaoExclusao.hide()"
				value="Não" />

			<br></br> <br></br>

		</center>

	</p:dialog>
				
</h:form>

Bean

@ManagedBean(name = "bean")
@SessionScoped
public class Bean implements Serializable {

	private static final long serialVersionUID = 1L;
	private Produto produto;
	private List<Produto> produtosList;
	@EJB
	private ProdutoDAO produtoDAO;

	public void excluir() {

		if (produtoDAO.excluir(getProduto())) {

			getProdutoList().remove(getProduto());

		}
	}

	public Produto getProduto() {
		if (produto == null) {
			produto = new Produto();
		}
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<Produto> getProdutosList() {
		if(produtosList == null){
			produtosList = produtoDAO.listar();
		}
		return produtosList;
	}

	public void setProdutosList(List<Produto> produtosList) {
		this.produtosList = produtosList;
	}

}

Cara tenta no teu comandButon que vc chama o método excluir, envés de vc dar um update no panelgrid de um update no teu datatable, igual ao código abaixo

<p:commandButton action="#{bean.excluir}"  
                oncomplete="confirmacaoExclusao.hide()"  
                value="Sim" update="produtoDataTable" /> 

Magni, já fiz isso e continua do mesmo jeito. Inclusive já tentei da um update no form, no panelGrid e no dataTable juntos…e nada.
Acho que vou deixar desse jeito mesmo…

Outro erro semelhante a esse:
Você vai para a ultima página, e depois envia outros dados para o datatable e a página seja menor que a lista anterior, ele não mostra nada na tela.

Exemplo:
Lista 01 tem 50 registro separados por páginas de 10 em 10 totalizando 5 páginas.

  • vai para ultima.
    Lista 02 tem 20 registro, manda listar na datatable
  • não mostra nada na página porque o ponteiro esta na página 5 e a lista 02 não tem página 5.

Alguém resolveu este problema ? :shock:

Obrigado.

Qual a versão do prime ? Tive os mesmo problemas com o 3.0 3.1

Vc pode fazer um bind no datatable e quando fizer alguma operação que envolve ele seta o index para 0.

edit: mais ou menos isso

private DataTable table = new DataTable();

public void fazAlgo(){
//Fez alguma coisa
table.setRowIndex(-1);
}

Polverini, minha versão do Primefaces é a 3.2.

Porém, consegui resolver adicionando uma pequena função javascript na página. Eu a chamo quando atualizo a lista de dados da tabela,
que é quando ocorre diferença na quantidade de registros.

Ficou assim:

<script type="text/javascript">
    function resetPaginator() {
        dataTableWidget.getPaginator().setPage(0);
    }
</script>

e no selectOneMenu que atualiza a tabela, faço isso:

<p:ajax event="change" update=":guiasCadastro:frmConsulta:listVeiculos" process="@this" oncomplete="resetPaginator();"/>

Mas agradeço a atenção e a resposta rápida!

Abraços.