ice: selectBooleanCheckBox в пределах ice: dataTable - PullRequest
0 голосов
/ 28 июня 2011

для выбора данных, которые я хочу удалить, я помещаю selectbooleanCheckbox в каждую строку моего dataTable, но флажок не меняет состояние и всегда имеет значение false, даже если я выбираю строку (она отлично работает вне Таблица данных). вот моя поддержка Бина:

    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;
}
    }

и это таблица данных, где я получаю данные:

    <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 голосов
/ 28 июня 2011

то, что вы сделали, это ... для всех объектов, которые вы связываете с одной и той же переменной, поэтому результатом будет последний элемент выбора item.it будет перезаписан до тех пор, пока все объекты не будут получены.

Решение - ::

создайте одно постоянное логическое свойство в классе разрешений, например isSelected

поместите значение со свойством, например

<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" value="#{p.selected}"/>

, вы получите значение 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;
}
0 голосов
/ 28 июня 2011

Вы связываете все флажки с одним и тем же значением в базовом компоненте, поэтому более поздние пустые значения будут перезаписывать начальное установленное значение.

Сохраните список значений и используйте переменную экземпляра для адресации.

...