为了选择我想要删除的数据,我在dataTable的每一行都放了一个selectbooleanCheckbox,但是checkbox不会改变状态,即使我选择了该行,它也总是被设置为false (它在dataTable之外工作得很好)。这是我的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;
}
}这是我获取数据的dataTable:
<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>有没有人遇到类似的问题?我的代码中有没有什么错误?
发布于 2011-06-28 17:52:18
你所做的是..对于所有的对象,你都绑定了相同的变量,所以结果是最后一次选择item.it会被覆盖,直到所有的对象都到达。
解决方案是:
在权限类中创建一个持久的布尔属性,如isSelected
将值与属性放在一起,例如
<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" value="#{p.selected}"/>您将在支持bean的checkbox属性中获得值true或false。
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;
}发布于 2011-06-28 17:10:56
您将所有复选框绑定到支持bean中的相同值,因此稍后空值将覆盖初始设置的值。
保留一个值列表,并使用实例变量对其进行寻址。
https://stackoverflow.com/questions/6503527
复制相似问题