ice:ice中的selectBooleanCheckBox:dataTable

时间:2011-06-28 08:15:45

标签: jsf data-binding ejb-3.0 icefaces

为了选择我要删除的数据,我在dataTable的每一行中放了一个selectbooleanCheckbox,但是复选框没有改变状态,即使我选择了行,它总是设置为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>
是不是有人遇到过类似的问题?我的代码中有错误吗?

2 个答案:

答案 0 :(得分:0)

您将所有复选框绑定到辅助bean中的相同值,因此稍后空值将覆盖初始设置值。

保留值列表并使用实例变量对其进行处理。

答案 1 :(得分:0)

你所做的是..对于你用相同变量绑定的所有对象,所以结果将是最后一个选择item.it将被覆盖直到所有对象都到达。

解决方案是::

在Permission类中创建一个持久的布尔属性,如 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;
}
相关问题