Olá pessoal, sempre que tenho problemas eu procuro e acho aki…mais esse não encontrei nada ainda se alguem tiver alguma dica…
Estou tentando implementar em exemplo do PrimeFaces que esta no site utilizando ( DataTable + Filtering + Checkbox ), quando implemento o DataTable + Filtering utilizando um List…sem problema ele funciona, DataTable + Checkbox ok…tudo um blz…porem quando DataTable + Filtering + Checkbox a tabela carrega, consigo selecionar todos…até ai blz…o problema esta no filtro quando seleciono o primeiro Ok ele faz o filtro perfeito, selecionando o segundo ele não faz nada quando seleciono o terceiro e traz o resultado do segundo…valeu
segue o Código;
xhtml
<p:dataTable id="multiCars" var="car" value="#{tableBean.mediumCarsModel}" paginator="true" rows="10"
selection="#{tableBean.selectedCars}"
filteredValue="#{tableBean.filteredCars}"
filterEvent="enter"
first="1"
>
<f:facet name="header">
Checkbox Based Selection
</f:facet>
<p:column selectionMode="multiple" style="width:18px" />
<p:column headerText="Model">
#{car.model}
</p:column>
<p:column headerText="Year">
#{car.year}
</p:column>
<p:column id="manufacturerColumn" filterBy="#{car.manufacturer}"
headerText="Manufacturer"
filterOptions="#{tableBean.manufacturerOptions}"
filterMatchMode="exact"
>
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column headerText="Color">
#{car.color}
</p:column>
<f:facet name="footer">
<p:commandButton id="multiViewButton" value="View" icon="ui-icon-search"
update=":form:displayMulti" oncomplete="multiCarDialog.show()"/>
</f:facet>
</p:dataTable>
<p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog"
height="300" showEffect="fade" hideEffect="explode" >
<p:dataList id="displayMulti"
value="#{tableBean.selectedCars}" var="selectedCar">
Model: #{selectedCar.model}, Year: #{selectedCar.year}
</p:dataList>
</p:dialog>
TableBean
@ManagedBean
@SessionScoped
public class TableBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 798972579525628219L;
private final static String[] colors;
private final static String[] manufacturers;
private SelectItem[] manufacturerOptions;
private List<Car> filteredCars;
private List<Car> carsSmall;
private List<Car> cars;
private Car selectedCar;
private Car[] selectedCars;
private CarDataModel mediumCarsModel;
private int y;
static {
colors = new String[10];
colors[0] = "Black";
colors[1] = "White";
colors[2] = "Green";
colors[3] = "Red";
colors[4] = "Blue";
colors[5] = "Orange";
colors[6] = "Silver";
colors[7] = "Yellow";
colors[8] = "Brown";
colors[9] = "Maroon";
manufacturers = new String[10];
manufacturers[0] = "Mercedes";
manufacturers[1] = "BMW";
manufacturers[2] = "Volvo";
manufacturers[3] = "Audi";
manufacturers[4] = "Renault";
manufacturers[5] = "Opel";
manufacturers[6] = "Volkswagen";
manufacturers[7] = "Chrysler";
manufacturers[8] = "Ferrari";
manufacturers[9] = "Ford";
}
public TableBean() {
carsSmall = new ArrayList<Car>();
populateRandomCars(carsSmall, 9);
manufacturerOptions = createFilterOptions(manufacturers);
mediumCarsModel = new CarDataModel(carsSmall);
}
private void populateRandomCars(List<Car> list, int size) {
for(int i = 0 ; i < size ; i++)
list.add(new Car(getRandomModel(), getRandomYear(), getRandomManufacturer(), getRandomColor()));
}
public List<Car> getFilteredCars() {
return filteredCars;
}
public void setFilteredCars(List<Car> filteredCars) {
this.filteredCars = filteredCars;
}
public List<Car> getCarsSmall() {
return carsSmall;
}
private int getRandomYear() {
return (int) (Math.random() * 50 + 1960);
}
private String getRandomColor() {
return colors[(int) (Math.random() * 10)];
}
private String getRandomManufacturer() {
return manufacturers[(int) (Math.random() * 10)];
}
private String getRandomModel() {
return UUID.randomUUID().toString().substring(0, 8);
}
private SelectItem[] createFilterOptions(String[] data) {
SelectItem[] options = new SelectItem[data.length + 1];
options[0] = new SelectItem("", "Select");
for(int i = 0; i < data.length; i++) {
options[i + 1] = new SelectItem(data[i], data[i]);
}
return options;
}
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
public Car getSelectedCar() {
return selectedCar;
}
public void setSelectedCar(Car selectedCar) {
this.selectedCar = selectedCar;
}
public Car[] getSelectedCars() {
return selectedCars;
}
public void setSelectedCars(Car[] selectedCars) {
this.selectedCars = selectedCars;
}
public CarDataModel getMediumCarsModel() {
return mediumCarsModel;
}
public void setMediumCarsModel(CarDataModel mediumCarsModel) {
int x = mediumCarsModel.getRowIndex();
y = mediumCarsModel.getRowIndex()+1;
this.mediumCarsModel = mediumCarsModel;
}
public String[] getManufacturers() {
return manufacturers;
}
public void setCarsSmall(List<Car> carsSmall) {
this.carsSmall = carsSmall;
}
public SelectItem[] getManufacturerOptions() {
return manufacturerOptions;
}
}
CarDataModel
public CarDataModel() {
}
public CarDataModel(List<Car> data) {
super(data);
}
@Override
public Car getRowData(String rowKey) {
//In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data
List<Car> cars = (List<Car>) getWrappedData();
for(Car car : cars) {
if(car.getModel().equals(rowKey))
return car;
}
return null;
}
@Override
public String getRowKey(Car car) {
return car.getModel();
}