2

単純な「行をクリックして選択する」テーブルと「最初の列テーブルの複数選択チェックボックス」を切り替えようとしています。テーブルの状態を変更するために、テーブルの外にチェックボックスがあります。単純なテーブル (最初の列にチェック ボックスがない) の場合、p:datatableタグで selectionMode を設定する必要があります。「単一」または「複数」のいずれかです。この状態では、すべて正常に動作します。

複数選択列がレンダリングされるように状態が変更された場合、行の選択でクリック イベントが消費されるようです。通常、この複数選択チェック ボックス テーブルを使用する場合、selectionMode は設定されません。したがって、マウス イベントはチェック ボックスの状態を変更します。

selectionMode を「設定解除」するにはどうすればよいですか。うまくいかなかったのは次のとおりです。

  1. table.setSelectionMode(null)- これにより選択が解除されます ("" への設定も解除されます)
  2. table.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet")次に、selectionMode を削除します (設定された属性にはありません)。

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

}
4

0 に答える 0