2014-05-09 36 views
0

在我的Xpages表單中,我有兩個字段,用戶將從@DBLookup中選擇值。它們是類別和子類別。Xpages Dependent Dojo Filtering選擇字段不工作

我使用組合框工作,但後來我發現了Dojo Filtering Select!這是一個非常棒的控件,對於我需要做的事情來說非常完美,因爲用戶想要在獲取所需值時使用類型提前和正確選項卡。

這些字段正常工作除了我無法獲得第二個字段填充。它取決於第一個字段的值。

我的代碼如下:

<xp:td> 
        <xp:label id="label3" value="Work Category" style="font-weight:bold"></xp:label> 
       </xp:td> 
       <xp:td> 




        <xe:djFilteringSelect id="djFilteringSelect2" 
         rendered="true" value="#{document1.workCategory}"> 
         <xe:this.defaultValue><![CDATA[""]]></xe:this.defaultValue> 
         <xp:selectItems> 
          <xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf'); 
    @DbColumn(db, "workCategoryView", 1) 
    }]]></xp:this.value> 
         </xp:selectItems> 
         <xp:eventHandler event="onChange" submit="true" 
          refreshMode="complete"> 
         </xp:eventHandler> 
         <xp:eventHandler event="onBlur" submit="true" refreshMode="complete"></xp:eventHandler> 
         <xp:eventHandler event="onFocus" submit="true" 
          refreshMode="complete"> 
         </xp:eventHandler></xe:djFilteringSelect></xp:td> 
       <xp:td> 
        <xp:message id="message3" for="workCategory"></xp:message> 
       </xp:td> 
      </xp:tr> 
      <xp:tr> 
       <xp:td> 
        <xp:label value="Work Sub Category" 
         id="workSubCategory_Label1" for="workSubCategory1" style="font-weight:bold"> 
        </xp:label> 
       </xp:td> 
       <xp:td> 


        <xe:djFilteringSelect id="djFilteringSelect3" 
         rendered="true" value="#{document1.workSubCategory}"> 
         <xe:this.defaultValue><![CDATA[""]]></xe:this.defaultValue> 
         <xp:selectItems> 
          <xp:this.value><![CDATA[#{javascript:var db:NotesDatabase = session.getCurrentDatabase(); 
    var key:String = document1.getItemValueString("djFilteringSelect2"); 
    @DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2,"[FAILSILENT]"); 

    }]]></xp:this.value> 
         </xp:selectItems> 
        </xe:djFilteringSelect></xp:td> 
       <td></td> 
      </xp:tr> 
      <xp:tr> 
       <xp:td> 

回答

1

你是指到錯誤的字段名(djFilteringSelect2而不是workCategory)。

此外,我會建議你做一個部分刷新,而不是一個完整的。

我不認爲你需要onBlur和onFocus事件。只需使用onChange事件。

更新

這個例子的工作原理:

<xe:djFilteringSelect id="djFilteringSelect2" value="#{document1.workCategory}"> 
    <xe:this.defaultValue><![CDATA[""]]></xe:this.defaultValue> 
    <xp:selectItems> 
     <xp:this.value><![CDATA[#{javascript: 
       @DbColumn("", "workCategoryView", 1) 
     }]]></xp:this.value> 
    </xp:selectItems> 
    <xp:eventHandler event="onChange" submit="true" refreshMode="partial" refreshId="djFilteringSelect3"></xp:eventHandler> 
</xe:djFilteringSelect> 

<xp:br></xp:br> 

<xe:djFilteringSelect id="djFilteringSelect3" value="#{document1.workSubCategory}"> 
    <xe:this.dojoAttributes> 
     <xp:dojoAttribute name="required" value="false"></xp:dojoAttribute> 
    </xe:this.dojoAttributes> 
    <xp:selectItems> 
     <xp:this.value><![CDATA[#{javascript: 
      var key:String = document1.getValue("workCategory"); 
      @DbLookup("","(DBLookupWorkSubCategoryView)",key,2,"[FAILSILENT]"); 
      }]]></xp:this.value> 
    </xp:selectItems> 
</xe:djFilteringSelect> 

通知我如何從1號過濾讀取值改爲選擇以document1.getItemValueString()來document1.getValue()。

另請注意,我添加了一個dojoAttribute來告訴第二個篩選器選擇它不是必需的,因爲控件的所需行爲導致onchange局部刷新失敗並且不能運行。如果需要過濾選擇,則可以添加一個額外的選擇項作爲默認值(如mentioned here)。

0

什麼不起作用?在typeahead列表中使用鍵盤選擇值時,是否發生錯誤或調用onChange?

你見過我對你之前關於這個問題的回答嗎? Xpages Dependent Field Lookups

通過djFilteringSelect更換組合框應該工作

+0

即使我做的Lausten先生建議的修正它仍然無法正常工作。我的意思是,第二個djFilteringSelect從來沒有任何可能的值。第二個字段取決於用戶在第一個字段中選擇的值。我無法確定變化事件是否觸發。 –

+0

與Chrome,你可以看到,如果AJAX請求發佈到服務器,當你在第一個字段中選擇一個值...或在onChange事件打印 –