PrimeFaces数据表一旦设置就删除selectionMode属性

时间:2013-01-04 18:35:00

标签: primefaces datatable

我正在尝试在简单的“单击要选择的行”表和“第一列表中的多选复选框”之间切换。我在表外有一个复选框来更改表的状态。对于简单表(第一列中没有复选框),必须在p:datatable标记中设置selectionMode;无论是“单身”还是“多重”。在这种状态下一切正常。

如果更改状态以便渲染多选列,则通过选择行来看似似乎消耗了单击事件。通常,在使用此多选复选框表时,不会设置selectionMode;因此,鼠标事件将改变复选框的状态。

如何“取消设置”selectionMode。以下是不起作用的事情:

  1. table.setSelectionMode(null) - 这会打破选择(设置为“”)
  2. table.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet")然后删除selectionMode(它不在set属性中)。
  3. 我的xhtml看起来像:

    <h:form id="addForm">
    
        <p:panel toggleable="false" closable="false" widgetVar="remarksPanel"
            id="remarksPanel" style="margin-bottom:5px; overflow:auto;">
    
            <p:selectBooleanCheckbox value="#{multipleSelectBean.bulkEdit}">
                <p:ajax update="addForm:remarksTable"
                    listener="#{multipleSelectBean.editModeChanged}" />
            </p:selectBooleanCheckbox>
            <h:outputText value=" Bulk Edit" />
    
            <p:dataTable var="remark" id="remarksTable" rowIndexVar="rowNum"
                value="#{multipleSelectBean.remarkList}" rowKey="#{remark.id}"
                selectionMode="multiple"
                selection="#{multipleSelectBean.selectedRemarks}">
    
                <p:column rendered="#{multipleSelectBean.bulkEdit}"
                    selectionMode="multiple" style="width:18px" />              
    
                <p:column headerText="Remark">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{remark.remark}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText style="width:98%" id="remark"
                                value="#{remark.remark}" />
                        </f:facet>
                    </p:cellEditor>
    
                </p:column>
    
    
            </p:dataTable>
    
    
    
        </p:panel>
    
    </h:form>
    

    我的豆子看起来像:

    package gov.gsa.krichards.sandbox;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Set;
    
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.FacesContext;
    
    import org.primefaces.component.datatable.DataTable;
    import org.primefaces.event.SelectEvent;
    
    @ManagedBean
    @SessionScoped
    public class MultipleSelectBean implements Serializable {
    
    private static final long serialVersionUID = 1L;
    private final static String[] categoryList;
    private List<Remark> remarkList = new ArrayList<Remark>();
    private Remark[] selectedRemarks = null;
    private String words = "Mauris interdum, turpis nec euismod c aliquet fermentum nisl, in tristique arcu tincidunt nec.";
    private boolean bulkEdit = false;
    private boolean initialized = false;
    
    static {
        categoryList = new String[4];
        categoryList[0] = "Cat5";
        categoryList[1] = "Cat4";
        categoryList[2] = "Cat3-UTP";
        categoryList[3] = "BNC";
    }
    
    public MultipleSelectBean() {
        Random r = new Random();
        for (int i = 0; i < 10; i++) {
            String cat = categoryList[r.nextInt(4)];
            int len = words.length();
            int begIndex = r.nextInt(len / 2);
            int endIndex = begIndex + r.nextInt(len - begIndex);
            Remark rem = new Remark(i, cat, words.substring(begIndex, endIndex));
            remarkList.add(rem);
        }
    }
    
    public void editModeChanged() {
        System.out.println("changed to " + bulkEdit);
    }
    
    public void setBulkEdit(boolean arg) {
        DataTable table = (DataTable) FacesContext.getCurrentInstance()
                .getViewRoot().findComponent("addForm:remarksTable");
        bulkEdit = arg;
    
        if (bulkEdit) {
            table.setSelectionMode("single");
        } else {
            table.setSelectionMode("multiple");
        }
    
    }
    
    public boolean isBulkEdit() {
        return bulkEdit;
    }
    
    public List<Remark> getRemarkList() {
        return remarkList;
    }
    
    public void setRemarkList(List<Remark> remarkList) {
        this.remarkList = remarkList;
    
    }
    
    public String[] getCategoryList() {
        return categoryList;
    }
    
    public Remark[] getSelectedRemarks() {
        if (selectedRemarks == null || selectedRemarks.length == 0)
            return null;
        return selectedRemarks;
    }
    
    public void setSelectedRemarks(Remark[] selectedRemarks) {
        this.selectedRemarks = selectedRemarks;
    }
    
    }
    

0 个答案:

没有答案