首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ice: ice:dataTable中的selectBooleanCheckBox

ice: ice:dataTable中的selectBooleanCheckBox
EN

Stack Overflow用户
提问于 2011-06-28 16:15:45
回答 2查看 5.1K关注 0票数 0

为了选择我想要删除的数据,我在dataTable的每一行都放了一个selectbooleanCheckbox,但是checkbox不会改变状态,即使我选择了该行,它也总是被设置为false (它在dataTable之外工作得很好)。这是我的backingBean:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    <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>

有没有人遇到类似的问题?我的代码中有没有什么错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-28 17:52:18

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

解决方案是:

在权限类中创建一个持久的布尔属性,如isSelected

将值与属性放在一起,例如

代码语言:javascript
复制
<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" value="#{p.selected}"/>

您将在支持bean的checkbox属性中获得值true或false。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2011-06-28 17:10:56

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

保留一个值列表,并使用实例变量对其进行寻址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6503527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档