天天看點

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

運作環境:JDeveloper 11.1.2.1.0 + Oracle Database 10g Express Edition 10.2.0.1。

實驗介紹:資料庫字段類型沒有Boolean類型,一般使用'Y'或’N'來表示true或false。

而Java資料類型有Boolean類型,是以儲存時需要把Boolean類型轉換為String類型,而顯示時要把String類型轉換為Boolean類型。

af:selectBooleanCheckbox元件可以自動轉換Boolean類型<->String類型,使用起來非常友善。

(1)首頁面

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

(2)全選IsPartTime,并Commit。

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

(3)檢視資料庫,發現IsPartTime字段值全部為'Y'。

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

(4)全不選IsPartTime,并Commit。

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

(3)檢視資料庫,發現IsPartTime字段值全部為'N'。

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

重要步驟說明:

1. 建立資料庫表:JOBS_CheckBox

在Jobs表的基礎上建立一個新表JOBS_CheckBox表,增加一個字段:IS_Parttime。

CREATE TABLE JOBS_CheckBox as select * from Jobs;

ALTER TABLE JOBS_CHECKBOX ADD (IS_Parttime VARCHAR2(1) );

ALTER TABLE JOBS_CHECKBOX ADD CONSTRAINT JOBS_CHECKBOX_PK PRIMARY KEY ( JOB_ID )ENABLE;

2. IsPartTime列頁面代碼

(1)從Data Control中拖放IsParttime到IsPartTime列,選擇生成“ADF Boolean CheckBox..."

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

CheckBox選中則指派‘Y’,沒選中指派'N':

Table 元件使用指南:使用CheckBox元件儲存和顯示Boolean類型字段

(2)“全選和全不選”實作原理和《 Table 元件使用指南之三:一次删除Table多行記錄 》一樣,請參考其說明。

<af:column sortProperty="#{bindings.JobsCheckboxView1.hints.IsParttime.name}" filterable="true"
           sortable="false" headerText="#{bindings.JobsCheckboxView1.hints.IsParttime.label}"
           align="center" id="c5">
    <f:facet name="header">
        <af:selectBooleanCheckbox id="selectAllCheckBox" autoSubmit="true" label="IsPartTime">
            <af:clientListener method="clickOnSelectAllCheckBox" type="valueChange"/>
            <af:serverListener type="SelectAllCheckBoxClickEvent"
                               method="#{backingBeanScope.myBackingBean.handleSelectAllCheckboxClick}"/>
        </af:selectBooleanCheckbox>
    </f:facet>
    <af:selectBooleanCheckbox value="#{row.bindings.IsParttime.inputValue}"
                              label="#{row.bindings.IsParttime.label}"
                              shortDesc="#{bindings.JobsCheckboxView1.hints.IsParttime.tooltip}"
                              id="sbc1" autoSubmit="true"/>
</af:column>
      

這裡有一個小問題,就是點選SelectAllCheckBox時,雖然我設定了autoSubmit="true",但是Commit/Rollback按鈕并沒有被Enable。

而點選每一行的CheckBox時,就可以Enable Commit/Rollback按鈕。

難道原因是因為SelectAllCheckBox隻是一個純頁面上的元件,沒有映射到模型層,對應到一個字段?待查。

3. Managed Bean的主要方法

public void handleSelectAllCheckboxClick(ClientEvent clientEvent) {
    boolean isSelectAllChecked = (Boolean)clientEvent.getParameters().get("params");
    RichTable rt = this.getJobsTable();
    for (int i = 0; i < rt.getRowCount(); i++) {
        JUCtrlHierNodeBinding rowData = (JUCtrlHierNodeBinding)rt.getRowData(i);
        Row row = rowData.getRow();
        if (isSelectAllChecked) {
            row.setAttribute("IsParttime", "Y");
        } else {
            row.setAttribute("IsParttime", "N");
        }
    }
}