in order to select the data i want to remove i put a selectbooleanCheckbox in each row of my dataTable, But the checkbox doesn't change state and it's always set to false even if i select the row (it works fine outside the dataTable). here's my backingBean:
public class PermissionCtrl {
//some attributes
private UIData datas;
private List<Permission> permissions;
private UISelectBoolean checkbox ;
@EJB
private PermissionEjbLocal permissionService;
//getters & setters
public List<Permission> getSelectedPermissions() {
Permission selectedRow = new Permission();
int size = datas.getRowCount();
List<Permission> selectedPermissions = new ArrayList<Permission>();
for (int i = 0; i < size; i++) {
datas.setRowIndex(i);
System.out.println(i);
System.out.println(checkbox.isSelected());
if (checkbox.isSelected()) {
selectedRow = (Permission) datas.getRowData();
selectedPermissions.add(selectedRow);
}
}
return selectedPermissions;
}
public String removeAction() {
List<Permission> selectedPermissions = getSelectedPermissions();
for (Permission p : selectedPermissions) {
permissionService.removePermission(p);
}
this.permissions = permissionService.getAllPermissions();
return null;
}
}
and this is the dataTable where i get the data:
<ice:form>
<ice:dataTable binding="#{permissionCtrl.datas}" value="#{permissionCtrl.permissions}" var="p">
<ice:column>
<f:facet name="header">
<ice:outputText value="select" />
</f:facet>
<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" />
</ice:column>
<ice:column>
<f:facet name="header">
<ice:outputText value="ID" />
</f:facet>
<ice:outputText value="test" />
</ice:column>
<ice:column>
<f:facet name="header">
<ice:outputText value="Label" />
</f:facet>
<ice:outputText value="#{p.label}" />
</ice:column>
<ice:column style="width:150px">
<f:facet name="header">
<ice:outputText value="Url" />
</f:facet>
<ice:outputText value="#{p.url}" />
</ice:column>
<ice:column style="width:300px">
<f:facet name="header">
<ice:outputText value="Description" />
</f:facet>
<ice:outputText value="#{p.description}" />
</ice:column>
</ice:dataTable>
</ice:form>
did anyone ran into a similar issue? are there any errors in my code?
what you have done is.. for all object you are binding with same variable,so the result would be last selection item.it would get overwrite till all objects arrived.
Solution is ::
make one persistent boolean property in Permission class like isSelected
put value with property like
<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" value="#{p.selected}"/>
you will get value true or false in checkbox property in backing bean.
public List<Permission> getSelectedPermissions() {
Permission selectedRow = new Permission();
int size = datas.getRowCount();
List<Permission> selectedPermissions = new ArrayList<Permission>();
for (int i = 0; i < size; i++) {
datas.setRowIndex(i);
selectedRow = (Permission) datas.getRowData();
if (selectedRow.isSelected()) {
selectedPermissions.add(selectedRow);
}
}
return selectedPermissions;
}