primefaces: Datatable: selectAllRows(), unselectAllRows() partly broken
1) Environment
- PrimeFaces version: 6.2.1
- Application server + version: Wildfly 11
- Affected browsers: Firefox (perhaps others)
2) Steps to reproduce
- Click on checkbox in header (calls internally selectAllRows()
- Unselect one checkbox from one row
- Nothing happens, as well as pagination and other ajax stuff is broken.
- After waiting and click another time on row or checkbox it will be unselected
–> More entries means more waiting. It is really slow for lists with > 20k entries.
3) Expected behavior
- Row will be unselected, and objects in selected list will be minus one.
4) Sample XHTML
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head />
<h:body>
<h:form id="form">
<p:dataTable
id="myTable"
widgetVar="myWidget"
var="entry"
rowKey="#{entry.name}"
selection="#{selectableTable.selected}"
rows="5"
rowSelectMode="add"
paginator="true"
value="#{selectableTable.entries}">
<p:ajax event="rowSelect" listener="#{selectableTable.rowSelectCheckbox}" update=":form:selected" />
<p:ajax event="rowUnselect" listener="#{selectableTable.rowUnselectCheckbox}" update=":form:selected" />
<p:ajax event="rowSelectCheckbox" listener="#{selectableTable.rowSelectCheckbox}" update=":form:selected" />
<p:ajax event="rowUnselectCheckbox" listener="#{selectableTable.rowUnselectCheckbox}" update=":form:selected" />
<p:ajax event="toggleSelect" listener="#{selectableTable.toggleSelected}" update=":form:selected"/>
<p:column selectionMode="multiple" />
<p:column sortBy="#{entry.name}">
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText value="#{entry.name}"/>
</p:column>
</p:dataTable>
<h:outputText id="selected" value="Selected: #{selectableTable.selected.size()}" />
</h:form>
</h:body>
</html>
6) Sample bean
package de.mypackage;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.ToggleSelectEvent;
import org.primefaces.event.UnselectEvent;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Named
@SessionScoped
public class SelectableTable implements Serializable{
private static final long serialVersionUID = 4338079192223741443L;
private List<Entry> entries;
private List<Entry> selected;
public class Entry implements Serializable {
private static final long serialVersionUID = 910001136636503766L;
private String name;
Entry() {}
Entry(String name) { this.name = name; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
@PostConstruct
public void init() {
this.entries = new ArrayList<>();
this.entries.add(new Entry("Miriam"));
this.entries.add(new Entry("Dennis"));
this.entries.add(new Entry("Dexter"));
this.entries.add(new Entry("Michelle"));
this.entries.add(new Entry("Frank"));
this.entries.add(new Entry("Kurt"));
}
public void rowSelectCheckbox(SelectEvent se) {}
public void rowUnselectCheckbox(UnselectEvent use) {}
public void toggleSelected(ToggleSelectEvent tse) {
RequestContext rc = RequestContext.getCurrentInstance();
if(tse.isSelected()) {
rc.execute("PF('myWidget').selectAllRows();");
setSelected(new ArrayList<>(getEntries()));
} else {
rc.execute("PF('myWidget').unselectAllRows();");
setSelected(new ArrayList<>());
}
}
public List<Entry> getEntries() { return entries; }
public void setEntries(List<Entry> entries) { this.entries = entries; }
public List<Entry> getSelected() { return selected; }
public void setSelected(List<Entry> selected) { this.selected = selected; }
}
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 16 (14 by maintainers)
Commits related to this issue
- Fix #3535: Unselect row after selecting @all rows — committed to melloware/primefaces by melloware 4 years ago
- Fix #3535: Unselect row after selecting @all rows (#6735) — committed to primefaces/primefaces by melloware 4 years ago
yep exactly